如果允许我执行以下操作:
template <typename T = int>
class Foo{
};
为什么我不允许在 main 中执行以下操作?
Foo me;
但我必须指定以下内容:
Foo<int> me;
C++11 引入了默认模板参数,现在我完全无法理解它们。
原文由 user633658 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果允许我执行以下操作:
template <typename T = int>
class Foo{
};
为什么我不允许在 main 中执行以下操作?
Foo me;
但我必须指定以下内容:
Foo<int> me;
C++11 引入了默认模板参数,现在我完全无法理解它们。
原文由 user633658 发布,翻译遵循 CC BY-SA 4.0 许可协议
稍有 不同的情况,但要晚一些,但涉及模板 _函数_。 gcc 11.2 似乎 无法编译:
template <typename T = int>
struct Test {};
template<typename T> void foo(T& bar) {}
int main()
{
Test t;
foo<Test>(t);
}
但 没有问题
template <typename T = int>
struct Test {};
template<typename T> void foo(T& bar) {}
int main()
{
Test t;
foo<Test<>>(t);
}
当然
template <typename T = int>
struct Test {};
template<typename T> void foo(T& bar) {}
int main()
{
Test t;
foo(t);
}
有效- 但有时您需要明确强制类型。这是编译器错误吗?
原文由 Radrich 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
笔记:
Foo me;
从 C++17 开始,没有模板参数是合法的。请参阅此答案: https ://stackoverflow.com/a/50970942/539997。适用于 C++17 之前的原始答案:
你所要做的:
模板参数必须存在,但您可以将它们留空。
把它想象成一个函数
foo
有一个默认参数。表达式foo
不会调用它,但foo()
会。参数语法必须仍然存在。这与那是一致的。