是否可以限制模板?

时间:2011-12-02 16:06:20

标签: c++ templates generics

  

可能重复:
  C++ Restrict Template Function
  Is it possible to write a C++ template to check for a function's existence?

是否可以限制可以实例化模板的类型 (也就是说,如果我使用template<type_not_allowed>会出现编译错误?)

3 个答案:

答案 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.