-1

假设我在 C++ 中有 void 类型的函数

例如:

void fun1(); 
void fun2();
void fun3();

如何将这些函数推送到数组中?例如:

array[0] = fun1();
array[1] = fun2();
array[2] = fun3();
4

4 回答 4

8

在 C 中使用函数指针。

void (*array[2])();
array[0] = fun1;
array[1] = fun2;

或者std::function在 C++ 中:

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);
于 2013-05-30T19:23:40.700 回答
2

为什么不使用接口模式。

IE

class CallBackInterface {
   public:
      virtual void CallBack();
};

class CallBack1 : public CallBackInterface{
   public:
      virtual void CallBack();
   private:
      int someData;
};

... ETC

然后使用基本类型创建数组

CallBackInterface arr[] = 
{
   CallBack1(),
   callBack2(5, "Hello"),
   ...
};

每个对象都可以携带它想要的任何有效载荷 - 然后你可以做

arr[1].CallBack();

调用函数

于 2013-05-30T19:29:29.230 回答
1
typedef void (*FUNC_PTR)(void);

FUNC_PTR funcs[3];

funcs[0] = func1;
funcs[1] = func2;
funcs[2] = func3;
于 2013-05-30T19:25:36.600 回答
1

如果函数的签名相同,则可以使用函数指针

于 2013-05-30T19:26:09.737 回答