可以說我有類型的空隙的作用在C++如何將函數推入C++數組中?
例如:
void fun1();
void fun2();
void fun3();
如何可以推這些功能到一個數組? 如:
array[0] = fun1();
array[1] = fun2();
array[2] = fun3();
可以說我有類型的空隙的作用在C++如何將函數推入C++數組中?
例如:
void fun1();
void fun2();
void fun3();
如何可以推這些功能到一個數組? 如:
array[0] = fun1();
array[1] = fun2();
array[2] = fun3();
在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);
@ RichardJ.RossIII和標籤中的「C」。 – 2013-05-30 19:26:05
和C作爲標籤。 std ::函數真的很好,但經典的函數指針會做。 – Xaqq
'std :: function'工作得很好,但這個答案或原始函數指針沒有問題。你正在肛門@理查德。 –
typedef void (*FUNC_PTR)(void);
FUNC_PTR funcs[3];
funcs[0] = func1;
funcs[1] = func2;
funcs[2] = func3;
如果職能的簽名都是一樣的,你可以使用功能指針
如果簽名是不同的,那你就搞砸了。 –
爲什麼不使用接口模式。
即
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();
調用函數
爲什麼?因爲它使你的代碼變得醜陋而且過於複雜。這不是java :) –
哇,談論錘子... :) – jrok
我認爲它更整潔,也更容易調試。此外,您還添加了編譯器的功能,以檢查是否沒有將錯誤的函數添加到數組中。 –
這些函數的類型是void(*)(),而不是void。 – jrok
一個不會「推」到陣列上...... – crashmstr