【问题标题】:how to extract data from refernce of shared_ptr<T&>如何从 shared_ptr<T&> 的引用中提取数据
【发布时间】:2019-08-01 15:00:23
【问题描述】:

这是我的函数定义

void subscribe(std::shared_ptr<StrategyOrderEvents &> &strategy)
{
     auto p=make_pair(strategy.get()->m_StrategyName,strategy);
}

但是当我尝试做strategy.get() 时,我收到以下错误:

‘class std::shared_ptr’没有名为的成员 ‘得到’

StrategyOrderEvents 类中,我有一个数据成员名称,我不会提取它

*编辑通知 get()->get() 是我尝试将其修复为 strategy.get()->m_StrategyName

【问题讨论】:

  • 我在我的代码中使用 std::shred_ptr
  • 鉴于您显示的代码,此错误没有意义。您应该使用strategy.get(),而不是strategy-&gt;get() 来访问原始指针。但是你无论如何都不想要原始指针,所以不要做任何.get(),只是strategy-&gt;m_StrategyName......而且-&gt;get()-&gt;get()也是无意义的。请确保您显示的错误可以与您显示的代码一起重现,以便我们给您一个连贯的答案。
  • @MaxLanghof 我编辑了代码,这是一个尝试,当我做'strategy->m_StrategyName'时,我得到“'->'的基本操作数具有非指针类型'std::shared_ptr'" auto p = std::make_pair(strategy->m_StrategyName,strategy);'
  • 你为什么要写这样的代码?你想做什么?

标签: c++ c++14 shared-ptr


【解决方案1】:

您不得形成指向引用的共享(或其他)指针。

随便

void subscribe(std::shared_ptr<StrategyOrderEvents>& strategy)

或者做

void subscribe(StrategyOrderEvents& strategy)

(最好加上const正确性)。

您当前正在接受对指向对象引用的共享指针的引用。从代码设计的角度来看,这已经是太多的引用了(但编译器只会抱怨,因为形成一个指向引用的指针是非法的)。

错误消息没有帮助,但您的 C++ 实现可能以在使用引用类型实例化时将其保留为空类的方式实现 std::shared_ptr 模板,有点像

template<class T>
class shared_ptr {
    // real implementation
};

template<T>
class shared_ptr<T&> {}; // empty class for invalid usage

【讨论】:

  • tnx 我把它改成 'void subscribe(std::shared_ptr& strategy)'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 2011-12-20
相关资源
最近更新 更多