私のコードでは、できるようにしたい
Table<double> tbl;
tbl.Create(2, 2, 1.0, 2.0, 3.0, 4.0);
コンストラクター経由でも
Table<double> tbl(2, 2, 1.0, 2.0, 3.0, 4.0);
私の経験から、省略記号 (...) を使用すると、追跡が困難なバグがいくつか発生するため、テーブルを初期化するために次のように考えました。
void Create(size_t rows, size_t columns, T val0)
{
ASSERT(rows * columns == 1);
Create(rows, columns);
_data[0] = val0;
}
void Create(size_t rows, size_t columns, T val0, T val1)
{
ASSERT(rows * columns == 2);
Create(rows, columns);
_data[0] = val0;
_data[1] = val1;
}
void Create(size_t rows, size_t columns, T val0, T val1, T val2)
{
ASSERT(rows * columns == 3);
Create(rows, columns);
_data[0] = val0;
_data[1] = val1;
_data[2] = val2;
}
私はあなたがアイデアを得ると思います。ただし、たとえば最大 50 個の要素の関数が必要な場合、これはかなり面倒です。これらすべてのコンストラクターも作成する必要があるという事実は言うまでもありません。これをよりエレガントに処理する別の方法はありませんか?
編集: この場合、省略記号 (...) を使用したくない理由を説明する必要があるかもしれません。次のコードを考えてみましょう。
Table<double> tbl(2, 2, 1.5, 2.1, 3, 4.5);
コンパイラは 5 番目の引数を型として解釈しますがint
、これは明らかに意図したものではありません。