为什么此代码有效(具有无效非模板函数的C++模板类)?
此 C++ 代码构建成功:
void h(int *)
{
}
template <typename T>
class A
{
public:
void f()
{
T *val;
h(val);
}
};
int main()
{
A<const int> a;
}
为什么?
不可否认,这A<const int>::f()行不通。
如果您调用a.f(),它将无法按预期构建。
那为什么A<const int>甚至允许存在一个实例呢?
我不确定 SFINAE 在这里如何适用。
我很感激 C++ 标准报价或相关链接。
回答
允许它存在是因为它的存在仍然是有用的。
考虑std::vector,它有一个单参数重载resize,默认构造新元素。绝对有用!但是std::vector,当您不打算以这种方式调整其大小时,拥有某种不可默认构造的类型也很有用。强制所有成员函数都可用,即使是用户不需要的函数,也会人为地限制类的适用性。
- @eepp - In that case, your question is answered by the suggested duplicate https://stackoverflow.com/questions/23679525/why-are-some-functions-within-my-template-class-not-getting-compiled