关于c ++:是否可以限制模板?

Is it possible to restrict a template?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
C++ Restrict Template Function
Is it possible to write a C++ template to check for a function's existence?

是否可以限制可以为其实例化模板的类型?(也就是说,如果我使用template,会有编译器错误吗?)


一种方法是不提供默认实现,只在希望允许的类型上专门化类模板。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template<typename T>
class Z
{
public:
    Z() {}
};

template<>
class Z<int>
{
private:
    Z();
};

Z<float> f; // OK
Z<int>   i; // Compile time error.


您可以在此处检查限制模板功能

我不能发表评论,所以这是一个答案…