2011-03-16 61 views
0

我想基於我的應用程序回調。最讓我困擾的問題是我必須指定lambda函數採用哪些參數。我所有其他擴展的基類都指定了兩種基本類型。它看起來像這樣:通過更改祖先中的typedef覆蓋方法 - 可能嗎?

class Callback 
{ 
    typedef function<void()> Function; 
    typedef vector< pair<string, vector<Function>> > CallbackContainer; 

public: 
    void callback(string); // both types are used 

是否有可能只是通過重寫擴展這一類的類型來改變拉姆達函數(Function型)的參數呢?或者callback方法中的代碼是否使用原始類型?如果是這樣,我可以強制使用新類型而不復制和粘貼代碼嗎?只是爲了實現幹。

回答

1

類型不是虛擬的;你不能在派生類中「覆蓋」它們。

從我對有關你想要做的事情的有限理解中,我認爲你應該使Callback成爲一個模板。像這樣:

template<typename ArgType> 
class Callback 
{ 
    typedef function<void(ArgType)> Function; 
    typedef vector< pair<string, vector<Function>> > CallbackContainer; 

public: 
    void callback(string); // both types are used 

這隻適用於只有一個參數的函數,當然。在當今的C++中使它更通用並不是微不足道的;在C++ 0x中,variadic模板使它變得更容易一些。不過,也許你可以看看Boost。很有可能你可以使用已經存在的東西,而不是自己動手。

+0

也要感謝提到可變參數模板,我不知道這樣的事情在C++中是可能的。 – 2011-03-16 19:03:07