Объявите тип переменной, используя строку - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть шаблон, который я хочу вызвать с соответствующим типом объекта без необходимости разбора строкового идентификатора / enum / typeid.name () и т. Д.

То есть вместо:

switch(varType)
{
case TYPE_ONE:
    templateFunction<TYPE_ONE>();
    break;

case TYPE_TWO:
    templateFunction<TYPE_TWO>();
    break;
...
etc...
}

Я бы предпочел использовать:

templateFunction<GetTypeFromEnum(MyEnum::INT)>();

или еще лучше:

templateFunction<GetTypeFromString("int")>();

Что-то похожее на перевернутый typeid?

Мне действительно удалось сделать это однажды в VBA, поэтому я думаю, что это должно быть выполнимо в C ++ ...

1 Ответ

0 голосов
/ 29 февраля 2012

Можете ли вы переопределить ваш templateFunction, чтобы принять фиктивный параметр?

template <typename T>
void templateFunction(const T& Dummy)
{
  // Do nothing with Dummy
}

Для этого вам просто нужно передать свою переменную varType, где вы вызываете функцию:

templateFunction(varType);
...