考虑以下课程:
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构造函数的模板特化中调用析构函数?
答案 0 :(得分:1)
只需放置一个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;
}
免责声明:我没有看到模板的用例。