gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:49:52 30 4
gpt4 key购买 nike

我正在尝试弄清楚智能指针可以实现什么。
但有一些感觉像是障碍。

普通指针有一个简短的定义 Someclass *p但是智能指针有点长shared_ptr<SomeClass> p当您必须处理这些指针的模板(如 vector )时,我觉得它开始变得令人厌烦。

那么智能指针有缩写吗?还是有一种允许使用简写的标准方法?

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

最佳答案

C++11 使这变得更加舒适!

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

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

虽然这只是接口(interface)真正需要的,因此您可能应该在实现中专门使用 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;
}

关于c++ - 我们如何在不使代码变大的情况下处理共享/弱 ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24182298/

30 4 0
文章推荐: javascript - 选择什么事件将处理程序从