sun*_*ide 9 c++ initialization class this
我想创建一个与某个父子关系中的另一个类相关联的类.为此,"child"类需要引用它的父级.
例如:
template <typename T>
class TEvent {
private: T* Owner;
public: TEvent(T* parent) : Owner(parent) {}
};
class Foo {
private: TEvent<Foo> Froozle; // see below
};
Run Code Online (Sandbox Code Playgroud)
现在的问题是我不能Froozle
直接初始化实例,也不能使用Foo构造函数的实例化列表,因为this
那里不允许引用.除了添加另一个方法setParent(T*)
(我不太喜欢,因为这意味着我必须让TEvent<>
实例处于无效状态),有没有办法实现这一点?
Mic*_*urr 11
从标准的12.6.2/7"初始化基础和成员"(强调我的):
mem-initializer的表达式列表中的名称在为其指定mem-initializer的构造函数的范围内进行计算.
[例:
Run Code Online (Sandbox Code Playgroud)class X { int a; int b; int i; int j; public: const int& r; X(int i): r(a), b(i), i(i), j(this->i) {} };
初始化
X::r
引用X::a
,X::b
用构造函数参数的值i
初始化,X::i
用构造函数参数的值i
初始化,并X::j
用值 初始化X::i
; 每次class X
创建一个对象时都会发生这种情况.][注意:因为mem-initializer是在构造函数的范围内计算的,所以
this
可以在mem-initializer的表达式列表中使用指针来引用正在初始化的对象.]
归档时间: |
|
查看次数: |
5337 次 |
最近记录: |