我一直在試圖簡化一些我的代碼,在我可以的地方簡化和調用。我一直在努力做的事情之一是將我遍佈整個地方的兩種常見過載融合成一個。它們如下:C++ Initializer_List進入指針向量
void MyClass::addSomething(Something & a)
{
vectorOfSomething.push_back(&a)
}
void MyClass::addSomething(std::vector<Something*> a)
{
for (unsigned int i = 0; i < a.size(); i++)
vectorOfSomething.push_back(a[i]);
}
該類有些東西是抽象的。 vectorOfSomething是指向Somethings的向量的向量。
本質,而不是必須這樣做:
std::Vector mySomethings = {&something1, &something2};
addSomething(mySomethings);
我想這樣做:
addSomething({something1, something2});
所以它更類似於第一過載(無需用戶打造首先是一個指針向量)。縱觀我看到的兩種方式,無論是通過:std :: initializer_list還是variadic模板,我都不敢承認這兩個模板對我來說完全是陌生的。
我給它一個初始化列表的鏡頭,但遇到了很多嘗試各種事情的錯誤。我設法讓函數實際接受列表,但我無法弄清楚如何讓它正確地填充矢量。主要的問題似乎是init列表中的值是'const'。
如果任何人有任何想法如何使這項工作,我將不勝感激!
爲什麼指向矢量?如果要共享對象的所有權,請在向量和原始對象作用域之間使用std :: shared_ptr。擁有指針向量(這應該是智能指針,從不是裸指針)的唯一理由是所有權共享(上文解釋)和多態性。我沒有在你的代碼中看到他們。我支付所有權共享,但你明確指針的使用,這是我討厭。 – Manu343726
因此,請向我們展示更多關於您要解決的問題的背景。 – Manu343726
在C++ 11中,可以使用語法'addSomething({something1,something2});'使用已有的函數:[ideone](http://ideone.com/wW1Te7)。 – user2079303