mr_*_*r_T 6 c++ assert vector shared-ptr c++11
当我有一个函数接收一个应该引用某个东西的(智能)指针时,我总是按如下方式开始:
class Foo;
void doSomething(const std::shared_ptr<Foo>& pFoo)
{
assert(pFoo);
// ...
}
Run Code Online (Sandbox Code Playgroud)
现在我正在为(智能)指针的向量(或其他容器)寻找类似的断言条件.我能想到的最好的是:
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; }));
// ...
}
Run Code Online (Sandbox Code Playgroud)
我想知道这是否可以改善..可以避免lambda吗?(我尝试使用shared_ptr的get()方法,但模板推导失败)或者是否有另一种断言整个容器的方法?
San*_*dro 10
还有一种方法:
assert(std::find(pFoos.begin(), pFoos.end(), nullptr) == pFoos.end());
Run Code Online (Sandbox Code Playgroud)
使用标准功能表达它的另一种稍微复杂的方式:
assert(std::none_of(pFoos.begin(), pFoos.end(), std::logical_not<std::shared_ptr<Foo>>{}));
Run Code Online (Sandbox Code Playgroud)
从C++ 14开始,您可以使用以下通用专业化std::logical_not:
assert(std::none_of(pFoos.begin(), pFoos.end(), std::logical_not<>{}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
528 次 |
| 最近记录: |