C++使用预定义参数调用静态函数指针
C++ Calling Static Function pointer with Predefined parameters
我遇到了一个非常不寻常的问题。。。我们的任务是将一系列十六进制值映射到函数指针。但是,我希望能够调用具有预定义参数的函数。以下是我正在努力工作的一段代码:
map<short, void(*)(MyClass, MyClass)> mapping = create_map();
map<short, void(*)(MyClass, MyClass)> create_map()
{
map<short, void(*)(MyClass, MyClass)>> m;
m[1] = &function(new MyClass(), new MyClass());
return m;
}
然而,它只允许我将不带参数的函数放入映射中。如何存储此设置并稍后调用?
如果您使用C++11,您可以使用std::bind
:
void function(MyClass* a, MyClass* b) { ... }
typedef map<short, std::function<void()>> funcmap;
funcmap create_map()
{
funcmap m;
m[1] = std::bind(function, new MyClass, new MyClass);
return m;
}
// use:
funcmap mapping = create_map();
mapping[1]();
如果没有,则可以创建一个存储参数和函数指针的结构。然后写一个operator()
,它将通过函数指针调用函数,该指针包含它存储的参数:
struct func {
typedef void(*fptr)(MyClass*, MyClass*);
func(fptr f, MyClass* m1, MyClass* m2) : ptr(f), arg1(m1), arg2(m2) { }
void operator()() {
ptr(arg1, arg2);
}
T ptr;
MyClass* arg1, arg2;
};
void function(MyClass* a, MyClass* b) { ... }
typedef map<short, func> funcmap;
funcmap create_map()
{
funcmap m;
m[1] = func(function, new MyClass, new MyClass);
return m;
}
// use:
map<short, func> mapping = create_map();
mapping[1]();
如果使用C++11,则可以使用lambda函数。
如果您使用的是旧版本的C++,那么您可以使用函子。
相关文章:
- 生成模板实例列表并对其调用静态函数
- 从静态方法调用静态函数指针
- C 从虚拟函数调用静态函数
- 从外部调用静态C函数
- 从库中定义的进程调用静态函数
- Boost Python def 成员函数,它调用静态函数,其中 self 作为唯一的参数
- 在对象实例上调用静态函数时解析错误
- 在依赖范围内调用静态函数模板
- 对已删除的对象调用静态函数
- C++使用预定义参数调用静态函数指针
- cpp 正文线程的本地函数是否安全?如果是这样,从中调用静态函数呢?
- 在命名空间中调用静态函数时出错
- 从类模板的(部分)专门化调用静态函数
- 在c++中调用静态函数
- 无法调用静态函数
- 在c++中对模板形参调用静态函数
- c++全局/堆栈实例ctor/dtor调用静态函数时崩溃
- 如何调用静态函数
- 通过函数指针从外部文件调用静态函数的不良做法
- c++在从另一个类的主函数调用静态函数时遇到麻烦