ключевое слово typename для std :: function - PullRequest
0 голосов
/ 30 января 2019

У меня есть класс

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 голосов
/ 30 января 2019

Ключевое слово typename не используется для импорта или определения новых псевдонимов типов.То, что вы делаете, на самом деле определяет переменную-член с именем EventHandler.

Вам нужно снова использовать typdef, чтобы определить псевдоним типа:

typedef typename Consumer::EventHandler EventHandler;

Или с современным C ++ с использованием using:

using EventHandler = typename Consumer::EventHandler;
0 голосов
/ 30 января 2019

Вам нужен псевдоним типа для зависимых Consumer::EventHandler.

Это должно работать:

using EventHandler =  typename Consumer::EventHandler;

для более низких версий компилятора (до C ++ 11)

typedef  typename Consumer::EventHandler EventHandler;
...