如何在不使代码庞大的情况下处理共享/弱ptr ?
How can we deal with shared/weak ptr without making the code huge?
我想弄清楚智能指针可以实现什么。
但是有些东西感觉像是一种障碍。
一个普通的指针有一个短的定义Someclass *p
,但智能指针有点长shared_ptr<SomeClass> p
,我觉得当你不得不处理这些指针的模板(如向量)时,它开始变得令人厌倦。
那么智能指针有一个简短的符号吗?或者有一个标准的方式允许速记?
我知道typepedef,但它仍然感觉我只是结束了大量的typepedef无处不在
c++ 11使这更加舒适!
我经常使用类型别名来解决这个问题。特别是这个,使我的代码更容易读:template <class T>
using PtrList<T> = std::vector<std::shared_ptr<T>>;
这只是接口真正需要的,所以你可能应该在实现中专门使用auto
和std::make_shared
。
当使用或遍历指针容器时,使用Boost也非常方便。范围-特别是boost::adaptors::indirected
.
下面是一个使用大量智能指针但避免使用长类型的小示例:
PtrList<Bar> foo_to_bar(PtrList<Foo> const& fooList)
{
PtrList<Bar> resultList;
resultList.reserve(fooList.size());
for (auto&& foo : fooList | boost::adaptors::indirected)
{
auto bar = std::make_shared<Bar>(foo);
bar->enableAwesomeness();
resultList.push_back(bar);
}
return resultList;
}
相关文章:
- 模板函数如何处理可能共享一个交集的多个类型名称?
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 使用共享库进行变体处理是个好主意吗?
- 是否有一种设计模式或面向对象的基本原则来处理这种共享资源的情况?
- 使用 CMake 和 C++ 处理共享库依赖项
- 如何处理加载错误的共享库版本的情况
- 使用共享变量进行线程处理
- C 汇编如何处理共享库和模板
- 处理共享_ptr时非初始化的价值
- 使用 Git 如何处理在不同修订版共享相同代码的C++项目?
- 共享指针矢量的自动创建和处理
- Dokan:我应该自己处理文件共享和访问权限吗?
- 最佳现代C 处理std ::共享_ptr的阵列
- 不同处理方法的设计模式,这些方法共享一些常见的处理链
- 在 c++ 中实现共享指针时如何处理常量对象
- C++11 使用共享对象的多线程处理
- 链接器如何处理链接到共享库的C++静态库的唯一typeinfo约束
- OpenMP共享文件处理程序
- 如何在不使代码庞大的情况下处理共享/弱ptr ?
- MFC文档模板中的共享处理程序预处理器指令