【发布时间】:2011-09-15 02:59:54
【问题描述】:
我想知道这样的事情是可能的。也许使用模板和诡计? 现在我要强制执行的唯一规则是你不能在类 bar 中使用构造函数(所以你不能传入指向 foo 或 a 的引用或指针)。
class Foo{
int a;
public:
struct Bar{
int barme(){ return a; }
};
};
我知道一个问题是 bar 如何知道要使用哪个 foo 实例?我不知道,但我希望 foo 有许多类的 Bar 和多个类 foo,每个类将有多个类。
我确定我在某处看到了一个诡计(可能使用不同的语言),但我不知道在哪里。我确实记得一个使用编译时间 const 的模板,但在这种情况下 foo 不会是编译时间,尽管它的 ptr/ref 可能是
【问题讨论】:
-
不允许使用构造函数?祈祷告诉这个对象是如何创建的?你知道编译器会创建一个默认构造函数、析构函数、复制构造函数和赋值运算符,如果你不提供一个:P 另请注意,这不会编译你的意思是让 Bar 继承自 Foo 吗?
-
@AJG85:是的,我的意思是一个不平凡/默认的 ctor
-
@AJG85:由于访问了
a,它无法编译,这是 OP 询问的问题。继承并不总是解决方案;嵌套类通常非常好。 (不过,在这种情况下,似乎不需要嵌套类。) -
我认为你能做的最好的事情是添加一个 Foo* 作为 Bar 中的成员和构造函数参数,并确保对来自 Bar 的任何引用都通过该引用(可能需要一个朋友声明太)
标签: c++ class templates inheritance