std :: function的typename关键字

问题描述 投票:1回答:2

我上课了

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

我想在此作为模板使用

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

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

c++ templates std-function typename
2个回答
3
投票

您需要依赖Consumer::EventHandler的类型别名。

这应该工作:

using EventHandler =  typename Consumer::EventHandler;

较低的编译器版本(在C ++ 11之前)

typedef  typename Consumer::EventHandler EventHandler;

2
投票

typename关键字不用于导入或定义新的类型别名。你正在做的是真正定义一个名为EventHandler的成员变量。

您需要再次使用typdef来定义类型别名:

typedef typename Consumer::EventHandler EventHandler;

或者使用using的现代C ++:

using EventHandler = typename Consumer::EventHandler;
© www.soinside.com 2019 - 2024. All rights reserved.