在我的代码中,我希望能够做到
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
,这显然不是故意的。