Re: how can i short name a compile time state ?
On Feb 27, 7:12 am, toton <abirba...@gmail.com> wrote:
On Feb 25, 1:56 pm, James Kanze <james.ka...@gmail.com> wrote:
[...]
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 ;
// ...
}
Hi thanks for the solution. It is working, and this is what I wanted.
However one problem is that , its name causes problem with one of
runtime function defined as,
dir_type o_dir(dir_type dir);
Can I put same name struct and function definition in same
name space, or I need to rename 2 versions as different name.
You can use the same name for both a class and a function in the
same scope, but I wouldn't. It's a hack, present only for
reasons of C compatibility, and will confuse the readers. I'd
come up with some different names. (Generally, the name of a
function should be a verb; the name of a class never is.)
(What i wanted to achieve with this is, one version which returns
orthogonal direction in run time using switch case statement, another
compile time version like const std::size_t dir_x =0; const
std::size_t dir_y = 1;
std::size_t o_dir[] = {dir_y,dir_x}; kind of lookup, except, I wanted
it in terms of enum, where values are not sequential (but finite) ,
and safe. In this version I cant make dir_y = 1000; If I make, 1000
size array is required.
I'm not sure I understand completely, but perhaps some sort of
metaprogramming trick could be used.
--
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