関数の引数の数がテンプレートパラメータに依存するように、整数テンプレートパラメータでテンプレートクラスの関数を定義します。ここでは例です:私はこのコードをコンパイルしたいインスタンス化のために引数が固定されているが、テンプレートパラメータによって可変であるテンプレートメソッド
template< class Coord, int dim >
class Point {
Coord mCoords[ dim ];
public:
void Set(/* I want exactly dim Coord arguments here. */);
};
:
Point<double,2> pt2d;
pt2d.Set(25, 32);
Point<double,3> pt3d;
pt3d.Set(25, 32, 100);
と失敗するには、このコード:
Point<double,2> pt2d;
pt2d.Set(25, 32, 100); // Too many arguments
Point<double,3> pt3d;
pt3d.Set(25, 32); // Too few arguments
今、私は手動で小さい寸法でPoint
を特化することができます無関係のSet
関数を持っているが、私は本質的に同じコードun-C++を繰り返すという習慣を見つける。さらに、intテンプレートパラメータのすべての可能な値を特化する必要はありません。
それはdim
の値ごとに専門のコードを記述せずにタイプCoord
の正確dim
引数を取るPoint<Coord,dim>::Set()
機能を実装することは可能ですか?
'ints'は' index_sequence'から推測できますか? –
@PiotrSkotnickiはい。それにもかかわらず、それを 'size_t'に変更しました。 – Barry