gpt4 book ai didi

c++ - 使用模板化函数映射枚举值

转载 作者:行者123 更新时间:2023-11-28 03:31:23 27 4
gpt4 key购买 nike

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

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

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

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

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

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

示例:

这里有一个例子可以更好地解释:

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

最佳答案

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");

关于c++ - 使用模板化函数映射枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12476027/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com