有没有办法编译方法,取决于模板参数?我正在尝试创建一个可以处理 2、3 或更多维度的 Coordinate 类。我想将访问方法提供为x()
,y()
和z()
,但我希望z()
只有在维度大于 3 时才能访问方法。现在(如下所示),我使用 astatic_assert
来防止使用z()
维度 2 的坐标。
template<typename DataType, int Dimension>
class Coord
{
private:
std::array<DataType, Dimension> _data;
public:
// how to achieve some kind of compile_if()
DataType& z()
{
static_assert(Dimension >= 3, "Trying to access an undefined dimension.");
return _data[2];
}
};
我想做的是隐藏z()
维度 2 的存在,这样
Coord<int, 2> ci2(0,0);
ci2.z() = 3; // shouldn't compile
不使用 static_assert 就无法编译。我已经看到很多关于 std::enable_if 的问题,但据我所知,它用于启用或禁用特定的重载。
问题是:有没有办法根据编译时参数使方法可用或不可用?