使用模板标签做出决定

时间:2013-05-09 18:29:13

标签: c++ templates template-meta-programming

我有一个模板化的类,我需要根据命令行参数进行实例化。

必须有比我能想到的更好的方式:

if (optionA == 1){
    if (optionB == 2){
        myclass <Option1, Option2, Option3> object;
    }
}
else if (optionA == 2){
 // a whole big if-else ladder
}

这甚至不允许我在if语句的范围之外使用我的模板化对象!顺便说一句,所有选项都是标签

1 个答案:

答案 0 :(得分:1)

您的挑战是您希望编译时决策(选项类型选择)基于运行时数据(args)。我可以想象一个生成“解析树”的宏/模板解决方案,将选项代码映射到标签。但这会导致产生模板化类型的组合爆炸,这会减慢编译速度(可能还会延迟编译)。另一种方法是为每个选项使用工厂方法,将选项对象传递给myclass构造函数。不如纯编译时生成那么高效,但我没有看到替代方案。