如何在 c++ 中创建 map<string, class::method>
How to create map<string, class::method> in c++
我正在尝试使用回调在C++中创建字符串和方法的映射,这样我就可以在映射中搜索函数并调用它。问题是我有不同类型和参数的方法,我不知道如何定义回调和映射。该方法适用于int add(int,int)和int减法(int,整型),但如何定义方法字符串helloworld()的回调?有人能帮我吗?谢谢
typedef int(*Callback)(int, int); //for add and subtract
QMap<QString, Callback> functionTable;
main{
registerCallback("add", add);
registerCallback("subtract", subtract);
int result = 0;
if (functionTable.contains(add))
{
Callback callback = functionTable[add];
result = callback(1, 2);
return QString::number(result) ;
}
else
{
return "methodNotFound";
}
}
int add(int a, int b)
{
return a + b;
}
int subtract(int a, int b)
{
return a - b;
}
String helloWorld()
{
return "hello world";
}
void registerCallback(QString methodname, Callback callback)
{
functionTable[methodname] = callback;
}
如果编译器支持C++11标准(几乎可以肯定),则可以从<functional>
头使用std::function
。由于这个现代C++功能在最近的MSOffice版本中被广泛使用(根据MSVC++开发人员博客),这应该会非常顺利。在GNU C++编译器中,它为每个调用添加两条CPU指令。
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- "Undefined class"作为is_base_of的论据
- 如何将class.cpp和class.hpp编译为一个.o文件
- 通过 get-Method 访问变量在类外不起作用
- '{'标记之前的预期类名,然后在预声明时无效使用不完整的类型'class class_name'
- 为什么我的 BaseClass:Method 代码编译(带有单冒号)?
- 如何使用"derived input class"创建派生类?
- 错误:"Left of getValue must have class/struct/union"
- ' class a : b ' 和 ' class a : public b ' 之间的继承类不同
- Pybind11 Class Definition
- 如何在源文件中定义类并将其声明在标题文件中(而不必使用`class :: method'语法定义类方法)
- cpp 未定义对"class::method"的引用
- getInstance - Class vs Method static
- 为什么在使用menu_selector时"Class::method"而不仅仅是"method"?
- 如何在 c++ 中创建 map<string, class::method>
- <Method> 不是<Class>
- 错误:对class::method(主、头文件、源代码)的未定义引用
- 对class::method的未定义引用