C++使用预定义参数调用静态函数指针

C++ Calling Static Function pointer with Predefined parameters

本文关键字:调用 静态函数 指针 参数 预定义 C++      更新时间:2023-10-16

我遇到了一个非常不寻常的问题。。。我们的任务是将一系列十六进制值映射到函数指针。但是,我希望能够调用具有预定义参数的函数。以下是我正在努力工作的一段代码:

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++,那么您可以使用函子。