繁体   English   中英

方法回调的C ++ 11模板别名

[英]C++11 template alias for a method callback

是否可以使用C ++ 11模板别名进行方法回调?

我有一个模板化方法,它将方法回调作为其输入参数之一,例如:

class Foo {
  public:
    template <typename OtherClass, typename T>
    void Bar(void (OtherClass::*callback)(T *));
};

我希望能够重写Bar()原型,以便它使用一个类型,因为我将在实现中的几个地方使用相同的类型。 我尝试使用下面的新C ++ 11别名,但它不起作用。

class Foo {
  public:
     // This does not work
     template <typename OtherClass, typename T>
     using Callback = void (OtherClass::*)(T *object);

     void Bar(Callback callback);
};

我错过了什么? 我找不到一个如何在我最喜欢的几个C ++ 11参考网站上工作的例子。

它不起作用。 这个:

template <typename OtherClass, typename T>
using Callback = void (OtherClass::*)(T *object);

声明别名模板,这意味着您必须实例化 Callback才能获得类型。 例如:

Callback<C, int>

将解析为:

void (C::*)(int*)

所以你的成员应该这样声明:

template<typename OC, typename T>
void Bar(Callback<OC, T> callback); 

您需要包含模板参数:

template <typename U, typename T>
void Bar(Callback<U, T> callback);

我想到了。 Bar()方法也需要模板化。

这有效:

class Foo {
  public:
     template <typename OtherClass, typename T>
     using Callback = void (OtherClass::*)(T *object);

     template <typename OtherClass, typename T>
     void Bar(Callback<OtherClass, T> callback);
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM