我上课了
class Consumer
{
public:
typedef std::function<void()> EventHandler;
...
};
我想在此作为模板使用
template<class Consumer>
class ConsumerGroup
{
public:
typename Consumer::EventHandler EventHandler;
ConsumerGroup(EventHandler handler);
};
但上面的一个结果编译错误说EventHandler不是一个类型。在这种情况下我应该如何使用typename关键字?
您需要依赖Consumer::EventHandler
的类型别名。
这应该工作:
using EventHandler = typename Consumer::EventHandler;
较低的编译器版本(在C ++ 11之前)
typedef typename Consumer::EventHandler EventHandler;
typename
关键字不用于导入或定义新的类型别名。你正在做的是真正定义一个名为EventHandler
的成员变量。
您需要再次使用typdef
来定义类型别名:
typedef typename Consumer::EventHandler EventHandler;
或者使用using
的现代C ++:
using EventHandler = typename Consumer::EventHandler;