std :: function的typename关键字

时间:2019-01-30 15:49:06

标签: c++ templates std-function typename

我上课

class Consumer
{
public:
    typedef std::function<void()> EventHandler;
    ...
};

我想在此用作模板

template<class Consumer>
class ConsumerGroup
{
public:
    typename Consumer::EventHandler EventHandler;
    ConsumerGroup(EventHandler handler);
};

但是在上面的结果编译错误中,说EventHandler不是类型。 在这种情况下,应该如何使用typename关键字?

2 个答案:

答案 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;