我与编译器战斗了一夜,我的想法已经用完了......
我在具有受保护功能的命名空间内有一个 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
谁能告诉我我在这里没有看到什么以及如何解决这个问题?
干杯