通过更改祖先中的typedef来覆盖方法 - 可能吗?

时间:2011-03-16 18:45:56

标签: c++ typedef

我正在尝试将我的应用程序基于回调。困扰我的问题是我必须指定lambda函数采用的参数。所有其他扩展的基类确实指定了两种基本类型。它看起来像这样:

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

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

是否可以通过覆盖扩展此类的类中的类型来更改lambda函数(Function类型)的参数?或者callback方法中的代码是否使用原始类型?如果是这样,我可以强制使用新类型而无需复制和粘贴代码吗?只是为了履行DRY。

1 个答案:

答案 0 :(得分: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中,使用可变参数模板会更容易。

但也许你可以看看Boost。很有可能你可以使用已经存在的东西,而不是自己动手。