From: Vladimir Prus (ghost_at_[hidden])
Date: 2003-05-27 23:36:25
Chuck Messenger wrote:
> Vladimir Prus wrote:
>> Chuck Messenger wrote:
>>>Vladimir Prus wrote:
>>>>Yep. This question was raised already. I think that making templates out
>>>>of all classes is *a* solution, but I'm not sure it's *the* solution.
>>>>The problem is that extensive template usage would prevent making
>>>>library --- either shared or static. I think that would be a big
>>>Why does that matter? The great majority of other Boost libraries are
>>>header-file-only. I think of .cpp components of Boost libraries as a
>>>sometimes-necessary evil, not as a desired feature.
>> Becase header-file-only libraries have two problems --- they increase
>> compilation times and they increase binary size. And you can't share the
>> code between different applications.
>> I think that's important practical aspect. In past, I was burned by
>> overgeneralization --- almost all core classes in a program had template
>> parameter. It had only one possible value, but I though different ones
>> were possible. As the result, compilation time was terrible, and no new
>> possible values for the template parameter became needed.
>> And these days, I'm rather unhappy with compilation times of BGL...
> Perhaps you can do both: write the library with templates for a
> generalized string. Then, supply "fast.cpp" and "fast.hpp" (choose
> better names). Use a pimpl idiom in fast.hpp, so it doesn't need to
> include any template code. fast.cpp includes the templates, but needs
> to be compiled only once.
That's a possible approach. But there are also at least two other:
- using preprocessor to generate two version
- using wstring internally with conversion on interface boundaries
I think it's better to wait for Unicode users to formulate what's needed. It
seems, for example, that the last approach would work better for me on
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk