【发布时间】:2012-03-19 05:08:36
【问题描述】:
我有一个模板,我想用适当的对象类型调用它,而不必解析字符串标识符/枚举/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++ 中是可行的......
【问题讨论】:
-
您是否尝试重新实现
boost::variant? -
boost::variant 的访问者实现肯定会起作用,但这意味着从适当的 operator() 重载中调用我的模板化函数。没关系,我想。但是,如果我有几个我可能希望调用的模板化函数(我确实这样做了),它会变得有点复杂。如果这真的是唯一的选择,我可以看到使用 boost::variant...也许它比看起来更好...?
-
我收回(一点)。如果我在调用之前将函数指针和对象引用传递给访问者,它确实会在一定程度上简化访问者的实现......不过,我对学习 C++ 很感兴趣,所以我仍然对任何替代方法感兴趣...... . 否则,看起来 boost::variant 可能是要走的路。
标签: c++ types declaration rtti