0
在我的代码我希望能够做带有可变参数列表初始化表
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);
编译器解释第五参数为int
类型,这显然是不打算。
感谢您的答复,但我很想解决这个问题,而无需使用C++ 11层的特性。 – demorge
如果你不想使用'C++ 11'特性,或许你最好的机会是将它传递给一个'double'数组(并且它的大小)并且从它初始化。像'double tmp [] = {2,2,1.5,2.1,3,4.5};表 tbl(tmp,6);'或者写一个宏来为你做。 –
Shahbaz
Pre-11 C++对于使用原始C数组非常糟糕。变量函数非常非C++,因为您没有任何类型安全性,并且不可能告诉您正确使用它们。 –