Re: template const trick versus myers singleton - global data revisited
* Technical:
On Jun 20, 10:40 pm, "Alf P. Steinbach" <al...@start.no> wrote:
Depends what you mean. The templated const trick is mostly for where you need a
/non-integral/ type constant. That is, except for possible static initialization
fiasco issues you can safely do this, in a header file:
template< typename Dummy >
struct Names_ { static std::string const cppLanguageCreator; };
template< typename Dummy >
std::string const Names_<Dummy>::cppLanguageCreator = "Bjarne Stroustrup";
typedef Names_<void> Names;
It's slowly coming together for me. Last(hopefully) quesiton.
Consider
template < typename dummy >
struct consts // constants
{
static double const PI;
inline static std::string const& creator()
{
static std::string const cppLanguageCreator = "Bjarne
Stroustrup";
return ( cppLanguageCreator );
}
};
template< typename dummy > double const consts<dummy>::PI =
3.14159;
typedef consts<void> constants;
Would the creator method within the struct be a a suitable alternative
to circumventing the possible static initialization fiasco?
Yes.
But on the other hand, the member routine gives more verbose and less readable
notation, possible nano-second-inefficiency (I'm mentioning that just for
completeness), and it can't deliver a compile time constant, that is, one that
can be used in declarations requiring compile time constant.
The main utility of the templated const trick has so far been in /debates/ about
allowing definitions of constants of any type for which a constant can be
defined, within a class definition, because via the templated const trick any
such in-class constant definition can be mechanically rewritten to standard
C++98, demonstrating that there's no particular technical show-stopper and that
current compilers already implement the basic machinery to handle them. I'm not
familiar enough with C++0x to say whether it's got those constants. But my
impression is that it has, that is, that C++0x will support such syntax (if you
want to check: the draft is available from the committe pages in PDF format).
Cheers & hth.,
- Alf
PS: a member routine defined in the class definition is implicitly 'inline', so
that keyword is superfluous in the example above.
--
Due to hosting requirements I need visits to <url: http://alfps.izfree.com/>.
No ads, and there is some C++ stuff! :-) Just going there is good. Linking
to it is even better! Thanks in advance!