我有一个模板,我想与适当的对象类型来调用,而不必分析字符串标识符/枚举/ 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++可行...
你们是不是要重新实现'提高:: variant'? – kennytm 2012-02-29 17:45:11
boost :: variant的访客实现肯定会起作用,但意味着在approprite operator()重载中调用我的模板化函数。没关系,我想。不过,如果我有几个模板函数,我可能会打电话(我也会这样做),但它会变得更复杂一些。我可以看到使用boost :: variant,如果这真的是唯一的选择...也许这是一个比看起来更好的选择...? – 2012-02-29 18:32:32
我拿回来了(一点)。如果我在调用访问器之前向访问者传递了一个函数指针和一个对象引用,它确实可以简化访问者的实现......但是,我是学习C++的一个坚果,所以我仍然对任何其他方法感兴趣。否则,看起来像boost :: variant可能是要走的路。 – 2012-02-29 18:42:15