可能重复:
C++ Restrict Template Function
Is it possible to write a C++ template to check for a function's existence?
是否可以限制可以实例化模板的类型
(也就是说,如果我使用template<type_not_allowed>
会出现编译错误?)
答案 0 :(得分:7)
一种方法是不提供默认实现,并仅在您希望允许的类型上专门化您的类模板。例如:
#include <iostream>
using namespace std;
template<class X> class Gizmo
{
public:
Gizmo();
};
template<> Gizmo<int>::Gizmo()
{
}
int main()
{
Gizmo<float> gf; // ERROR: No specialization for Gizmo<float> results in a linking error
}
答案 1 :(得分:3)
您可以在此处查看Restrict Template Function
我不能发表评论,所以这是一个答案......
答案 2 :(得分:3)
将构造函数设置为非法类型的私有:
template<typename T>
class Z
{
public:
Z() {}
};
template<>
class Z<int>
{
private:
Z();
};
Z<float> f; // OK
Z<int> i; // Compile time error.