これは、ここでは何が起こっていますか?
#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(I天国」とは何かを持っていると仮定しますtはまだ理解して気にしていますか?)友人修飾子は、囲まれた名前空間に定義された関数を自由な関数として入れますか? (これらの特定のメンバ関数が... documentionに記載されていない)add_ref
とrelease
として非フレンド、メンバ関数を自分の投稿を削除誰
編集
は、問題を解決しました。 friend
修飾子を含むネストされた定義はどうなりますか?
あなたはどんなエラーを受け取っていますか? –
edit:friend修飾子で定義した関数はメンバ関数ではなく、自由な関数です。それらがクラス本体で定義されているという事実はそれらをメンバー関数にしません(私はこれが誤解を招く可能性があることに同意します)。 –
自由な関数の代わりに 'add_ref'と' release'メンバ関数を使うことについては、これはBoostのドキュメントに明示されていないことに注意してください(少なくとも私は見つけられませんでした)。 –