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