gpt4 book ai didi

c++ - 将 boost::intrusive_ptr 与嵌套类一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:48:17 26 4
gpt4 key购买 nike

具体来说,我需要声明(据我所知)intrusive_ptr_{add_ref,release} 作为我引用类的 friend :

#include <boost/intrusive_ptr.hpp>
using boost::intrusive_ptr;

class Outer {
public:

//user-exposed interface goes here

protected:
class Inner {
public:
Inner():refct(0){}
virtual ~Inner(){}

//machinery goes here

size_t refct;
};

friend void boost::intrusive_ptr_release(Inner *p);
friend void boost::intrusive_ptr_add_ref(Inner *p);

intrusive_ptr<Inner> handle;

};

namespace boost {

void intrusive_ptr_release(Outer::Inner *p){
if ((p->refct -= 1) <= 0){
delete p;
}
}

void intrusive_ptr_add_ref(Outer::Inner *p){
p->refct++;
}

};

我无法找到正确的语法来编译并保持我想要的访问权限。我的主要问题是 gcc 似乎对“boost::intrusive_ptr_release(Outer::Inner *p) 应该在命名空间 boost 中声明”感到不安。

我从 this example 看到intrusive_ptr 助手是在命名空间 boost 内向前声明的——但我不能向前声明它们,因为据我所知,嵌套类(即这些函数引用的“内部”)可以只能在它们的外部类内部前向声明,这也是友元声明必须去的地方。

伟大的 C++ 大师们,处理这个问题的正确方法是什么?

最佳答案

你不必将它们放在 namespace boost 中,你可以将它们放在与你的 class Outer 相同的命名空间中,它们将通过参数依赖找到查找。

Every new intrusive_ptr instance increments the reference count by using an unqualified call to the function intrusive_ptr_add_ref, passing it the pointer as an argument.

关于c++ - 将 boost::intrusive_ptr 与嵌套类一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7074471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com