Должен ли я явно показывать типы в пакете параметров при создании шаблона? - PullRequest
4 голосов
/ 16 января 2020

У меня есть пример, иллюстрирующий мой вопрос:

#include <utility>

class Foo {
 public:
  Foo(int i) {}
};

template<typename T, typename ...Args>
class Bar {
 public:
  T t;
  Bar(Args &&... args) : t(std::forward<Args>(args)...) {}
};

, и если я хочу создать экземпляр этого шаблона:

Bar<Foo> foo(1);

, компилятор выдаст ошибку:

no matching function for call to ‘Bar<Foo>::Bar(int)’

Так что мне нужно написать следующее:

Bar<Foo, int> foo(1);

Это раздражает, особенно если у меня есть классы с длинным списком параметров.

Так есть ли способ? Я могу избавиться от явного отображения типов в пакетах параметров

1 Ответ

7 голосов
/ 16 января 2020

Если вы хотите, чтобы конструктор переадресовал, сделайте , который шаблоном

template<typename T>
class Bar {
 public:
  T t;
  template<typename ...Args>
  Bar(Args &&... args) : t(std::forward<Args>(args)...) {}
};

Обычно мы заботимся только о типах аргументов во время инициализации t.

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