如何在不使代码变大的情况下处理共享/弱ptr?

时间:2014-06-12 10:37:20

标签: c++ raii syntactic-sugar

我正在试图找出智能指针可以实现的目标。
但是有些东西感觉像是一种障碍。

普通指针有一个简短的定义Someclass *p,但智能指针稍长shared_ptr<SomeClass> p,当你不得不处理那些指针的模板(如矢量)时,我觉得它开始变得烦人。

那么智能指针有一个简短的符号吗?或者是否有允许卖空的标准方法?

我知道typedef,但它仍然觉得我到处都会有大量的typedef。

1 个答案:

答案 0 :(得分:1)

C ++ 11让这更舒服!

我经常使用类型别名来解决这个问题。特别是这一点,使我的代码更具可读性:

template <class T>
using PtrList<T> = std::vector<std::shared_ptr<T>>;

这只是接口真正需要的,所以你应该在实现中专门使用autostd::make_shared

使用或迭代指针容器时,使用Boost.Range非常方便 - 特别是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;
}