[英]Construction from Array
我正在為C ++開發一個簡單的容器類,我意識到能夠從數組中復制值會很有幫助。
兩者之間的區別在於:
myClass myInstance;
myInstance += 2;
myInstance += 4;
myInstance += 8;
myInstance += 16;
和這個:
myClass myInstance;
int myArray[] = {2, 4, 8, 16};
myInstance = myArray;
顯然,陣列結構要清潔得多。 但是,由於您無法獲得傳遞給函數的數組的大小(在這種情況下為operator=
),因此復制值是一個問題。
我可以將size與數組一起作為參數傳遞,但這意味着我不能使用operator=
:
myInstance.getArrayValues(myArray, 4);
遠不如直觀
myInstance = myArray;
這樣的事情通常如何處理?
實際上,您可以通過引用接受本機數組。 這是一個可以執行所需操作的賦值運算符的示例:
template <std::size_t N>
const myClass& operator=(const int(&arr)[N])
{
// use arr as you do usually with arrays :)
// N is the size of the array.
return *this;
}
最好的方法可能是使用迭代器,即為您的類提供一個包含第一個和最后一個迭代器的模板化函數,該函數當然也可以使用指針。
好處是您將可以從任何容器中獲取輸入。
或者,您可以等待編譯器中的C ++ 0x支持,並充分利用新功能,該功能允許使用初始化列表(如數組)進行構造(如果我沒記錯的話)。 在那之前,我認為使用迭代器是必經之路。
Boost.Assignment庫旨在解決此問題。
該標准在std::vector
模板類中進行處理(TR1的std::array
類用於不更改大小/容量的C樣式數組)。
std::vector
通過使用insert和Assign函數完成了您想要的(再次,不重載operator=
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.