【发布时间】:2012-03-07 22:21:18
【问题描述】:
我与编译器斗争了一整夜,我的想法已经用完了......
我在具有受保护功能的命名空间内有一个 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
谁能告诉我我在这里没有看到什么以及如何解决这个问题?
干杯
【问题讨论】:
标签: c++ namespaces typedef friend crtp