можно ли такое на шаблонах провернуть...
От: ламмму Украина http://itjob.kharkov.ua
Дата: 20.12.06 13:43
Оценка:
Привет!
значит есть вот что:
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*/) т.е. компилятор точно знает значение передаваемого аргумента
<b>bold text</b>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.