是否可以使用 C++11 模板别名进行方法回调?
我有一个模板化方法,它将方法回调作为其输入参数之一,例如:
class Foo {
public:
template <typename OtherClass, typename T>
void Bar(void (OtherClass::*callback)(T *));
};
我希望能够重写 Bar() 原型(prototype),以便它使用一个类型,因为我将在实现的多个地方使用相同的类型。我在下面尝试使用新的 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);
关于方法回调的 C++11 模板别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17127328/