當我有一個函數接收應該參照的東西(智能)指針,我總是開始如下:C++如何斷言,所有的std :: shared_ptr的一個向量指的是什麼
class Foo;
void doSomething(const std::shared_ptr<Foo>& pFoo)
{
assert(pFoo);
// ...
}
現在我正在爲(智能)指針的向量(或其他容器)尋找類似的斷言條件。最好的我能拿出來的是:
void doSomething(const std::vector<std::shared_ptr<Foo> >& pFoos)
{
assert(std::all_of(pFoos.begin(), pFoos.end(), [](const std::shared_ptr<Foo>& pFoo) { return pFoo; }));
// ...
}
我不知道這是否可以改善.. lambda可以避免嗎? (我嘗試使用shared_ptr的get()方法,但模板演繹失敗)或者是否有另一種方法來聲明整個容器?
是否有任何理由,你爲什麼會不會改變你的函數的語法來接收'Foo&'而不是?畢竟,_guarantees_有一個對象,並且不需要聲明。與矢量相似,它可以包含'std :: reference_wrapper'。 –
paddy
'assert(!std :: count(v.begin(),v.end(),nullptr));' –
@PiotrSkotnicki訪問所有元素,而當第一個元素不滿足找到一個條件。 – juanchopanza