我正在尝试将我的应用程序基于回调。困扰我的问题是我必须指定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。
答案 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。很有可能你可以使用已经存在的东西,而不是自己动手。