Привет!
значит есть вот что:
enum some_enum { en1, en2, en3 };
void foo(some_enum e) {...}
в зависимости от значения параметра foo ведет себя совершенно по разному (т.е. банальный switch)
void foo(some_enum e)
{
swith (e) {
case en1: foo_en1_implementation(); break;
...
default: throw not_implemented;
}
}
не люблю писать switch принципильно

поэтому делаю так:
enum some_enum { en1, en2, en3 };
template <some_enum>
void foo()
{
std::cout << "unspecified" << std::endl;
}
template <>
void foo<en1>()
{
std::cout << "en1 implementation" << std::endl;
}
int main()
{
foo<en1>();
foo<en2>();
return 0;
}
все как бы работает... но как-то некрасиво писать foo
<en1>()
хочется вот так:
foo(en1); // но внутри swithc не писать
Возможно ли такое сотворить ?
ЗЫ: никакого runtime не будет... foo будет вызываться только так foo(/*en1 | en2 | en3*/) т.е. компилятор точно знает значение передаваемого аргумента