我有一個模板,我想與適當的對象類型來調用,而不必分析字符串標識符/枚舉/ 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