Как установить std :: vector в качестве параметра по умолчанию для шаблона? - PullRequest
0 голосов
/ 18 декабря 2018

Я хотел бы создать шаблонный класс, который имеет два аргумента шаблона.Первый - N - это класс переменной по умолчанию, установленный как int, а второй container - это контейнер из stl, а по умолчанию - std::vector.

#include <iostream>
#include <vector>

template <class N=int, 
      template <class T=N, class Allocator=std::allocator<N>> 
      class container=std::vector>
class foo{
    container<N> cont;
};

int main() 
{
    foo f;
}

Когда я создал объект f указанного выше класса без аргументов шаблона, компилятор написал следующую ошибку:

In function 'int main()':
15:9: error: missing template arguments before 'f'

Я бы хотел, чтобы foo был эквивалентенfoo<int, std::vector> объявление.

Где проблема в моем определении класса?

1 Ответ

0 голосов
/ 18 декабря 2018

В C ++ 14 или более ранних версиях вам нужно написать foo<> для создания экземпляра шаблона.

Начиная с C ++ 17, он фактически работает так, как вы его написали, из-за шаблона классаАргумент Дедукция.Возможно, вы захотите обновить версию языка C ++ с -std=c++17, если ваш компилятор поддерживает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...