Шаблон псевдонима класса в качестве параметра шаблона c ++ - PullRequest
0 голосов
/ 24 августа 2018

Как сослаться на шаблон псевдонима класса A, заданного в качестве параметра шаблона для класса C, который наследуется от базового класса шаблона B?

#include <vector>

struct A
{
    // the alias template I want to refer to:
    template<class T>
    using Container = std::vector<T>;
};

// the base class
template<template<class> class _Container>
struct B 
{
    _Container<int> m_container;
};

template<class _A>
struct C : public B<   typename _A::Container  >
{//                    ^^^^^^^^^^^^^^^^^^^^^^ 

};

int main()
{
    C<A> foo;
}

Я пробовал несколькорешение путем добавления ключевого слова template в каждое возможное место в выражении (например, template<class T> typename _A::Container<T>, typename _A::template Container ...), но g++ дает либо "недопустимый аргумент шаблона 1" или "несоответствие типа / значения" !

1 Ответ

0 голосов
/ 24 августа 2018

Правильный синтаксис:

template <class A>
struct C : public B<   A::template Container  >
{
};

LIVE

Кстати: не используйте _A в качестве имени параметра шаблона, идентификаторы, начинающиеся со знака подчеркивания, за которым сразу следует заглавная буква , зарезервированы в C ++.

...