假设我在c ++中有类型void的功能
例如:
void fun1();
void fun2();
void fun3();
如何将这些功能推入阵列? 例如:
array[0] = fun1();
array[1] = fun2();
array[2] = fun3();
答案 0 :(得分:8)
使用C中的函数指针
void (*array[2])();
array[0] = fun1;
array[1] = fun2;
或C ++中的std::function
:
std::function<void(void)> fn1 = fun1;
std::function<void(void)> fn2 = fun2;
std::vector<std::function<void(void)> > v;
v.push_back(fn1);
v.push_back(fn2);
答案 1 :(得分:2)
为什么不使用界面模式。
即
class CallBackInterface {
public:
virtual void CallBack();
};
class CallBack1 : public CallBackInterface{
public:
virtual void CallBack();
private:
int someData;
};
...等
然后使用基本类型
创建数组CallBackInterface arr[] =
{
CallBack1(),
callBack2(5, "Hello"),
...
};
每个对象都可以携带它想要的任何有效负载 - 然后你可以
arr[1].CallBack();
调用函数
答案 2 :(得分:1)
typedef void (*FUNC_PTR)(void);
FUNC_PTR funcs[3];
funcs[0] = func1;
funcs[1] = func2;
funcs[2] = func3;
答案 3 :(得分:1)
如果函数的签名相同,则可以使用函数指针