的解決方案是不同的C和C++編寫,並且也不同在 C++ 11和前C + +11。
在所有的這些,你可以有指針的簡單數組 功能:
double (*array[3])() = { &f1, &f2, &f3 };
要調用函數:
std::cout << (*array[i])() << std::endl;
這是非常有限的,因爲這意味着功能 問題不能依賴於任何其他數據。出於這個原因,它 在C往常一樣創建一個struct
:
struct F
{
double (*pf)(void*);
void* data;
};
F array[3] = { { &f1, NULL }, { &f2, someData }, { &f3, NULL } };
std::cout << (*array[i].pf)(&data) << std::endl;
(有,但是,很多情況下,特別是在數字 計算,如果是這種矯枉過正它主要是使用 回調。 。)
在C++中,還具有限定一個抽象基 類,與虛擬功能(其將在每個 派生類中重寫),並保存指針各種 派生類的實例的選項:
class F
{
public:
virtual ~F() {}
virtual double operator()() const = 0;
};
F const* array[3] = { &obj1, &obj2, &obj3 };
std::cout<< (*array[i])() << std::endl;
最後,在C++ 11中,有一個標準對象std::function
它封裝了所有這些。 (然而,你必須自己去查看這個 然而,像大多數人一樣,我還沒有訪問 一個完全支持C++ 11的編譯器,所以一直無法 這個練習。)
請決定用C或C++ – fuz 2013-03-06 09:47:31