Re: how can i short name a compile time state ?
On Feb 25, 8:36 am, toton <abirba...@gmail.com> wrote:
I want to remember a compile time variable state, just to have some
typing convenience. I am not sure if I can do it using some typedef.
To give a short example,
I have an enum as,
enum dir_type{
dir_x,dir_y,dir_xd
};
and 2 specializations as,
template<dir_type>
dir_type o_dir();
template<>
dir_type o_dir<dir_x>(){
return dir_y;}
template<>
dir_type o_dir<dir_y>(){
return dir_x;
}
now in a function I want to do,
template<dir_type dt>
void funct(){
std::cout<<dt<<std::endl;
dir_type od = o_dir<dt>(); /// what would be compile time equiv =
of
this line so than i can call next line?
dir_type d = o_dir<od>();}
Now for the commented line, I want a compile time typedef , so
that od is a name rather than a runtime state, and I can call
the next line. This is just to remove repetitive writing of
o_dir<dt> , in several places when i can simply write od.
As you've written it, you can't. od is a value, initialized by
the return value of a function, and as such, is not a compile
time constant (at least not yet---there's some discussion of
allowing such trivial functions to be used in constant
expressions).
I'm not too sure what you're trying to achieve. Perhaps
something like:
template< dir_type >
struct o_dir ;
template<>
struct o_dir< dir_x >
{
static dir_type const other = dir_y ;
} ;
// etc.
could be used, e.g.:
template< dir_type dt >
void
funct()
{
dir_type const od = o_dir::other ;
dir_type d = o_dir< od >::other ;
// ...
}
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34