I recently wrote about the function of class member function callbacks. I need to save the callback object and function pointer, then call the function pointer and fill in the appropriate parameters where the callback is needed.
I started out as a form of typedef void (AAA::*Function)(int a, int b);, but when I need to support different parameter lists of member function, I obviously need a dynamic way to implement it.
class AAA
{
public:
    int add(int a, int b)
    {
        return (a + b);
    }
};
class BBB
{
public:
    void setValue(std::string value)
    {
        this->value = value;
    }
private:
    std::string value;
};
class CCC
{
public:
    void bind(??? p)    // Binding objects and callback functions.
    {
        this->p = p;
    }
    template <class... Args>
    auto callback(Args&&... args)   // Autofill parameter list.
    {
        return this->p(std::forward<Args>(args)...);
    }
private:
    ??? p;  // How is this function pointer implemented?
};
int main()
{
    AAA aaa;
    BBB bbb;
    CCC ccc;
    ccc.bind(???(aaa, &AAA::add));
    int number = ccc.callback(5, 6);
    ccc.bind(???(bbb, &BBB::setValue));
    ccc.callback("Hello");
    system("pause");
    return 0;
}
I don't know how can I implement the function pointer "???".