假设我有10个模板化函数,例如:
command1<T>(const std::string&)
command10<T>(const std::string&, int timeInSeconds)
在我的代码中的某个时间点,我将建立我希望执行特定命令。然后,我将请求有关与此命令相关联的类型的信息(在运行时),该命令通过枚举返回给我。所以我确定我希望执行command2
并且枚举包含STRING
。我谨因此致电:
command2<std::string>(id, param1, param2);
您建议采用哪种方法进行此映射?
枚举可以包含INT,BOOL; DOUBLE或STRING。传递给特定命令的参数不依赖于枚举值。
示例:
以下是一个更好解释的例子:
假设我的程序从命令行收到“command4 a”。我解析这个输入并确定我需要调用command4。然后我查找与“a”相关联的类型,在这种情况下获取INT
。我现在需要致电command4<int>("a");
答案 0 :(得分:2)
switch
语句可在此处使用:
switch (type) {
case INT: commmand4<int>(id); break;
...
}
根据您实际调用方法的方式,对参数进行模板化可能是一个好主意:
template<typename F, typename... Args> void call_function(Type type, Args... &&args) {
switch (type) {
case INT: return F::command<int>(std::forward(args)...);
...
}
}
请注意,因为您无法将函数模板传递给函数,所以您必须将函数模板包装在类中:
struct Command1 {
template<typename T> static void command(const std::string&);
};
...
call_function<Command1>(INT, "a");