2010-03-18 60 views

回答

3

你不能;它們都是不同的類型,而且陣列是同類的。

無論參數是什麼或返回值是什麼,都有一個隱含的this,它是類類型唯一的。該類型的類成員指針是:

return_value (class_type::*)(parameters); 

正如你所看到的,因爲他們屬於不同的班級,他們將永遠是不同的類型。即使它是同一班級,return_valueparameters必須一致才能創建數組,否則您仍然會有不同的類型。

什麼是更大的圖片?想到了Boost.BindBoost.Function。另外,虛擬功能可以解決你的問題。

0

不知道函數的參數或返回類型很難定義它們,請看page以獲得它的要點或發佈函數的聲明。

1

正如其他人指出的,你不能直接存儲指向不同類型函數的指針。您可能需要查看Command模板,例如,從Modern C++ Design,它至少可以讓您將不同的可調用的「事物」(指向函數,函子,成員函數的指針或智能指針)放入單一事物中。

它本身可能不足以滿足您的需求(顯然)會以不同類型實例化的模板生成不同的類型。這些類型都將使用相同的語法,但不會全部進入數組(需要單一類型)。

根據您的約束(特別是編譯時與運行時索引),您可以使用Boost :: tuple來存儲命令對象的集合。你可以將它看作一個數組,使用數字索引來獲取單個項目。與普通的陣列,但是:

  1. 語法是有點難看,和
  2. 索引在編譯時間內完成(使用編譯時間常數)。
0

其他人已經注意到爲什麼你不能這樣做。但即使你可以,你會怎麼做呢。爲了調用成員函數指針,你需要一個適當類型的對象來調用它。所以你需要知道每個成員函數指針的類型。你需要退後一步,弄清楚你試圖完成的是什麼。