模板默认参数

时间:2013-03-12 22:52:50

标签: c++ templates

如果我被允许执行以下操作:

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

为什么我不允许在main中执行以下操作?

Foo me;

但我必须指明以下内容:

Foo<int> me;

C ++ 11引入了默认模板参数,现在它们对我完全理解是难以理解的。

4 个答案:

答案 0 :(得分:151)

你必须这样做:

Foo<> me;

模板参数必须存在,但您可以将它们留空。

将其视为具有单个默认参数的函数foo。表达式foo不会调用它,但foo()将会调用它。参数语法必须仍然存在。这与此一致。

答案 1 :(得分:31)

使用C ++ 17,您确实可以。

此功能称为class template argument deduction,为声明模板类型的变量的方式增加了灵活性。

所以

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

int main() {
    Foo f;
}

现在为legal C++ code

答案 2 :(得分:18)

您可以使用以下内容:

Foo<> me;

int成为您的模板参数。角括号是必要的,不能省略。

答案 3 :(得分:17)

你不能这样做,但你可以这样做

typedef Foo<> Fooo;

然后再做

Fooo me;