私は一晩中コンパイラと戦いましたが、アイデアが尽きてしまいました...
保護された機能を持つ名前空間内に CRTP 構造があります。派生クラス (同じくその名前空間内) は、別の名前に型定義されています。
その隣には、その関数を呼び出そうとする静的関数を持つクラス (別の名前に型定義されています) があります。だから私は友達を作り始めますが、それでもコンパイラ(私の場合はVS 2010)は関数へのアクセスを許可しません。
一部のコードはおそらくより明確です。
namespace foobar
{
namespace internal
{
template <typename T>
class A
{
friend class E;
protected:
void foo()
{
static_cast<T*>(this)->_foo();
}
};
class B : public A<B>
{
friend class E;
friend class A<B>;
protected:
void _foo()
{
printf("Foo from B\n");
}
};
}
typedef internal::B C;
class D
{
public:
static void Bar();
};
typedef D E;
void D::Bar()
{
C mB;
mB.foo();
}
}//foobar namespace
ここに表示されていないものと、これを解決する方法を誰か教えてもらえますか?
乾杯