Аргументы шаблона по умолчанию


Если мне разрешено делать следующее:

template <typename T = int>
class Foo{
};

почему я не могу сделать следующее В главном?

Foo me;

но я должен указать следующие:

Foo<int> me;

C++11 представил аргументы шаблона по умолчанию, и сейчас они неуловимы для моего полного понимания.

4 100

4 ответа:

нужно сделать:

Foo<> me;

аргументы шаблона должны присутствовать, но вы можете оставить их пустыми.

думайте об этом как о функции foo С одним аргументом по умолчанию. Выражение foo Не буду называть его, но foo() будет. Синтаксис аргумента все еще должен быть там. Это согласуется с этим.

Вы можете использовать следующие:

Foo<> me;

и int быть аргументом шаблона. Угловые скобки необходимы и не могут быть опущены.

вы не можете сделать это, но вы можете сделать это

typedef Foo<> Fooo;

а потом сделать

Fooo me;

С C++17, вы действительно можете.

эта функция называется вычет аргумента шаблона класса и добавить больше гибкости, чтобы вы могли объявлять переменные шаблонных типов.

и

template <typename T = int>
class Foo{};

int main() {
    Foo f;
}

теперь юридический код C++.