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