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++,因爲您沒有任何類型安全性,並且不可能告訴您正確使用它們。 –