是否可以将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参考网站上,我找不到一个这样做的例子。
发布于 2013-06-16 03:53:18
它不是这样工作的。这一点:
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); 发布于 2013-06-16 03:53:14
您需要包含模板参数:
template <typename U, typename T>
void Bar(Callback<U, T> callback);发布于 2013-06-16 03:53:52
我想通了。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);
};https://stackoverflow.com/questions/17127328
复制相似问题