Если мне разрешено делать следующее:
template <typename T = int>
class Foo{
};
Почему мне не разрешено делать следующее в основном?
Foo me;
Но я должен указать следующее:
Foo<int> me;
C ++ 11 представил аргументы шаблона по умолчанию, и сейчас они не совсем понятны.
Foo
может быть идентификатором шаблона или могут быть явная конкретизацией в зависимости от того, есть ли аргумент по умолчанию. Лучше сохранить явный синтаксис создания экземпляров. Думайте об этом как о функцииfoo
с единственным параметром по умолчанию. Вы не можете назвать это какfoo
, вы называете это сfoo()
. Имеет смысл сохранять это последовательным.foo
; Вы можете назвать класс без аргументов, как,Foo
однако.<>
в этом случае больше нет необходимости. Проверьте мой ответ для более подробной информации.С C ++ 17 вы действительно можете.
Эта функция называется вычетом аргументов шаблона класса и обеспечивает большую гибкость в способе объявления переменных шаблонных типов .
Так,
теперь допустимый код C ++ .
источник
Вам не разрешено делать это, но вы можете сделать это
а затем сделать
источник
typedef Foo<float> Fooo;
без типа по умолчанию?using Fooo = Foo<>;
Вы можете использовать следующее:
И должен
int
быть вашим аргументом шаблона. Угловые скобки необходимы и не могут быть опущены.источник