具有不同签名的函数数组

Mir*_*pas 5 c++ function-pointers method-signature c++11

我有这个课程:

class Foo
{
    ...
};

class Foo1 : public Foo
{
    ...
};

...

class FooN : public Foo
{
    ...
};
Run Code Online (Sandbox Code Playgroud)

是否可以使用这些签名的函数数组:

void f1(Foo1*){}
...
void fN(FooN*){}
Run Code Online (Sandbox Code Playgroud)

如果这些函数是非静态成员函数而不是常规函数,是否有任何更改?我不认为这会改变一些事情.

谢谢!

Mir*_*pas 0

我找到了这个问题的解决方法:

#include <iostream>
#include <vector>

class Foo
{
};

class Foo1 : public Foo
{
};

class Foo2 : public Foo
{
};

class Foo3 : public Foo
{
};


void f1(Foo1*)
{
    std::cout<<"f1\n";
}

void f2(Foo2*)
{
    std::cout<<"f2\n";
}

void f3(Foo3*)
{
    std::cout<<"f3\n";
}

template<typename T>
void AddPointer(std::vector<typename void (*)(Foo*)>& fPointers, T function)
{
    fPointers.push_back(reinterpret_cast<void (*)(Foo*)>(function));
}

void main()
{
    std::vector<typename void (*)(Foo*)> fPointers;

    AddPointer(fPointers, f1);
    AddPointer(fPointers, f2);
    AddPointer(fPointers, f3);

    Foo1 foo1;
    Foo2 foo2;
    Foo3 foo3;

    fPointers[0](&foo1);
    fPointers[1](&foo2);
    fPointers[2](&foo3);
}
Run Code Online (Sandbox Code Playgroud)