C++ 使用字符串声明变量类型

C++ 使用字符串声明变量类型,c++,types,declaration,rtti,C++,Types,Declaration,Rtti,我有一个模板,我想用适当的对象类型调用它,而不必解析字符串标识符/enum/typeid.name等 也就是说,而不是: switch(varType) { case TYPE_ONE: templateFunction<TYPE_ONE>(); break; case TYPE_TWO: templateFunction<TYPE_TWO>(); break; ... etc... } 我更愿意使用: templateFunction

我有一个模板,我想用适当的对象类型调用它,而不必解析字符串标识符/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++中必须是可行的……/P> < P>你能重新定义你的模板函数,所以取一个哑参数吗?

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

您是否正在尝试重新实现boost::variant?boost::variant的访问者实现肯定会工作,但这意味着要从适当的操作符重载中调用我的模板函数。我想没关系。但是,如果我有几个模板化的函数,我可能希望调用它们,并且我确实这样做了,那么它会变得更复杂一些。如果这真的是唯一的选择,我可以看到使用boost::variant。。。也许这是一个比看起来更好的选择?我收回一点。如果我在调用之前向访问者传递一个函数指针和一个对象引用,它确实在某种程度上简化了访问者的实现。。。尽管如此,我还是个喜欢学习C++的人,所以我仍然对任何其他方法感兴趣…否则,看起来boost::variant可能是一个不错的选择。仅此而已-我实际上没有必要类型的变量。我想通过传递一个表示其类型名的字符串来生成该类型的变量。有点像typeid.name函数的反转-我指定了一个字符串并返回指定类型的变量。我不认为存在“typeid.name反转”这样的事情,可能boost::variant是您不那么糟糕的选择。
templateFunction(varType);