在 C++17 中,您可以像以下示例中一样在主函数中进行类模板参数推导:
template<class T = int>
struct X{};
int main()
{
X myX;
}
为什么无法为数据成员进行模板参数推导?
template<class T = int>
struct X{};
struct Y
{
X myX;
};
int main()
{
Y myY;
}
错误: 在没有参数列表的情况下无效使用模板名称'X' X myX;
我并没有参与决策,但是我认为允许这样做存在一些问题。我们假设以下代码:
template<class T = int>
struct X
{
X(T t = T{}) {}
};
int main()
{
Y myY;
}
struct Y
{
Y();
X myX{'a'};
};
Y::Y() : myX{0.0} {}
myX
是X<int>
, X<double>
还是X<char>
?Y() : myX{0.0} {}
就足够具有说明性了。 - Barryusing Z = ZTemplate<>
我们将有两个不同的名称:需要默认模板的类将具有类型为 Z 的成员,这很好,但其他类将具有类型为 ZTemplate<something>
而不是 Z<something>
的成员,我认为后者更好。 - dcon
X<>
即可。 - Davis Herring