テンプレート引数に応じて、メソッドをコンパイルする方法はありますか? 2、3、またはそれ以上の次元を処理できる Coordinate クラスを作成しようとしています。x()
accesses メソッドを、y()
およびとして提供したいのですが、次元が 3 より大きい場合にのみメソッドにアクセスできるz()
ようにしたいと考えています。今のところ (以下に示すように)、次元 2 の座標に を使用できないようにするためにa を使用しています。z()
static_assert
z()
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 に関する多くの質問を見てきましたが、私が理解しているのは、特定のオーバーロードを有効または無効にするために使用されることです。
質問は: コンパイル時の引数に応じて、メソッドを使用可能にするかどうかを決定する方法はありますか?