如果我被允许做以下事情:
template <typename T = int>
class Foo{
};
Run Code Online (Sandbox Code Playgroud)
为什么我不允许在主要方面做以下事情?
Foo me;
Run Code Online (Sandbox Code Playgroud)
但我必须指明以下内容:
Foo<int> me;
Run Code Online (Sandbox Code Playgroud)
C++ 11引入了默认模板参数,现在它们对我完全理解是难以理解的.
Jos*_*eld 166
你必须做:
Foo<> me;
Run Code Online (Sandbox Code Playgroud)
必须存在模板参数,但您可以将它们留空.
可以把它想象成foo具有单个默认参数的函数.表达式foo不会调用它,但foo()会调用它.参数语法必须仍然存在.这与此一致.
Pao*_*o M 40
使用C++ 17,你的确可以.
此功能称为类模板参数推导,并为您声明模板化类型的变量提供了更多灵活性.
所以,
template <typename T = int>
class Foo{};
int main() {
Foo f;
}
Run Code Online (Sandbox Code Playgroud)
现在是合法的C++代码.
And*_*owl 18
您可以使用以下内容:
Foo<> me;
Run Code Online (Sandbox Code Playgroud)
并且int是你的模板参数.角括号是必要的,不能省略.
g24*_*24l 17
你不能这样做,但你可以做到这一点
typedef Foo<> Fooo;
Run Code Online (Sandbox Code Playgroud)
然后呢
Fooo me;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
58900 次 |
| 最近记录: |