C++ 动态创建包装成员函数调用的函数

C++ 动态创建包装成员函数调用的函数,c++,function-pointers,C++,Function Pointers,下面是一个场景:我正在使用一个使用函数指针进行回调的遗留库。重写旧库不是一个可行的选择。但是我也希望回调调用类成员函数而不是全局函数 据我所知,最好的选择是硬编码固定数量的预定义全局函数,这些函数使用全局类指针执行分派: foo *globalPointers[3]; void callback1() {globalPointers[0]->invoke(); } void callback2() {globalPointers[1]->invoke(); } void callba

下面是一个场景:我正在使用一个使用函数指针进行回调的遗留库。重写旧库不是一个可行的选择。但是我也希望回调调用类成员函数而不是全局函数

据我所知,最好的选择是硬编码固定数量的预定义全局函数,这些函数使用全局类指针执行分派:

foo *globalPointers[3];
void callback1() {globalPointers[0]->invoke(); }
void callback2() {globalPointers[1]->invoke(); }
void callback3() {globalPointers[2]->invoke(); }
void (*globalCallbacks[3])() = {&callback1, &callback2, &callback3};

class foo
{
    public:
    int idx;

    foo() 
    {
        idx = findFreeSlot();
        globalPointers[idx] = this;
        registerLibraryCallback(globalCallbacks[idx]);
    }
    ~foo() {releaseSlot(idx);}

    void invoke();
};
恶心,恶心,恶心!有没有(可移植的)方法在运行时动态创建新的回调函数,而不是在编译时硬编码一个集合(在本例中为3)?换句话说,是否有一种(兼容的)方法来“memcpy a function”并修改其局部变量


当然,如果使用函数对象而不是全局函数指针等,所有这些问题都会消失。但我还是要使用一个遗留库。

所以这个库不提供任何方法将用户定义的参数提供给回调?可以在运行时生成函数,但是,这肯定比全局指针表更复杂,并且不会真正跨平台。@VTT不幸的是,不创建脚本引擎,我认为这是不可能的。因此,该库不提供任何方法将用户定义的参数提供给回调?可以在运行时生成沉没函数,但这肯定比全局指针表更复杂,并且不会真正跨平台。@VTT不幸的是,不创建类似脚本引擎的东西,我认为这是不可能的。