0

假设我有 10 个模板化函数,例如:

command1<T>(const std::string&) 
command10<T>(const std::string&, int timeInSeconds)

在我的代码中的某个时间点,我将确定我希望执行一个特定的命令。然后,我将请求有关与此命令关联的类型的信息(在运行时),这些信息通过枚举返回给我。所以我确定我希望执行command2并且枚举包含STRING. 因此,我想致电:

command2<std::string>(id, param1, param2); 

您会推荐什么作为进行此映射的好方法?

枚举可以包含 INT、BOOL;双精度或字符串。传递给特定命令的参数不依赖于枚举的值。

例子:

这是一个更好地解释的例子:

假设我的程序从命令行接收“command4 a”。我解析这个输入并确定我需要调用 command4。然后我查找与“a”关联的类型,在本例中为 get INT。我现在需要打电话command4<int>("a");

4

1 回答 1

2

A switch statement will work here:

switch (type) {
    case INT: commmand4<int>(id); break;
    ...
}

Depending on how you're actually calling the methods, templating on the arguments may be a good idea:

template<typename F, typename... Args> void call_function(Type type, Args... &&args) {
    switch (type) {
        case INT: return F::command<int>(std::forward(args)...);
        ...
    }
}

Note that because you can't pass a function template to a function, you'll have to wrap up the function templates inside a class:

struct Command1 {
    template<typename T> static void command(const std::string&);
};
...

call_function<Command1>(INT, "a");
于 2012-09-18T11:54:39.690 回答