std::function 的类型名称关键字

typename keyword for std::function

我有一个class

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;

或者使用现代 C++ using:

using EventHandler = typename Consumer::EventHandler;