考虑以下类:
template<int A, int B>
class Point
{
int x;
int y;
public:
Point() : x(A), y(B) { std::cout << "This is allowed" << std::endl; }
};
template<> Point<0, 0>::Point() { std::cout << "This is not allowed" << std::endl; }
我希望允许用户只在的情况下实例化这个类
Point<A, B> pt;
其中A和B不等于零,因此的具体情况
Point<0, 0> pt;
应该被禁止。
阻止用户创建这样的对象,甚至阻止其使用的最佳方法是什么?(例如呼叫成员功能等。)
例如,在Point<0, 0>
的情况下,是否可以将其设置为私有构造函数?或者在所述Point构造函数的模板专业化中,从构造函数内部调用析构函数?
只需放置一个static_assert:
template<int A, int B>
class Point
{
int x;
int y;
public:
Point() : x(A), y(B)
{
static_assert( ! (A == 0 && B == 0), "This is not allowed");
}
};
int main()
{
// This is not allowed:
// Point<0, 0> p00;
Point<0, 1> p01;
Point<1, 0> p10;
return 0;
}
免责声明:我没有看到模板的用例。