这个无法编译,
#include <boost/intrusive_ptr.hpp>
class X
{
public:
void intrusive_ptr_add_ref(X* blah)
{
}
void intrusive_ptr_release(X * blah)
{
}
};
int main()
{
boost::intrusive_ptr<X> ex(new X);
}
但是这样做:
#include <boost/intrusive_ptr.hpp>
class X
{
public:
friend void intrusive_ptr_add_ref(X* blah)
{
}
friend void intrusive_ptr_release(X * blah)
{
}
};
int main()
{
boost::intrusive_ptr<X> ex(new X);
}
和这个:
#include <boost/intrusive_ptr.hpp>
class X
{
public:
};
void intrusive_ptr_add_ref(X* blah)
{
}
void intrusive_ptr_release(X * blah)
{
}
int main()
{
boost::intrusive_ptr<X> ex(new X);
}
我想这与SFINAE有关(我还没有去理解)。友元限定符是否将定义的函数作为封闭命名空间中的自由函数? 编辑 删除他们的帖子的人,非友元成员函数如
add_ref
和release
(这些特定成员函数在文档中没有提到...)解决了问题。带有friend
限定符的嵌套定义会发生什么?
add_ref
和release
成员函数而不是自由函数,应该注意到 Boost 文档中没有明确说明(或者至少我没有找到)。 - Luc Touraille