【发布时间】:2014-01-09 20:29:42
【问题描述】:
我有一种情况,我想隐藏一个基类并限制可以从它继承的类:
namespace _detail {
class Private abstract final {
struct Base abstract {
protected:
Base() {}
};
friend struct ::A;
friend struct ::B;
friend struct ::C;
};
}
struct A : _detail::Private::Base {}; //error
struct B : _detail::Private::Base {}; //error
struct C : _detail::Private::Base {}; //error
编译器告诉我A、B 和C 无法访问_detail::Private::Base,即使它们是Private 的朋友。我以前使用过这种模式没有问题,与我使用它的其他时间相比,我真的看不出这里有什么不同。我没看到什么?
【问题讨论】:
-
friend struct A;将命名空间_detail中的结构声明为朋友。 -
@sftrabbit 它有效,为什么不呢?
-
@DyP 抱歉忘了放 :: 运算符
-
@sftrabbit visual C++,见msdn
-
现在您需要前向声明。但是它应该可以工作(对于标准 C++,忽略
abstract)。
标签: c++ inheritance visual-c++ friend access-control