Initializer list not order

问题描述:

因此,我制作了一个名为Dictionary的类,该类继承自基础IEnumerable并包含List类型的成员。 List有一个const unsigned int&成员,用于存储和公开其项目数。Initializer list not order

这是Dictionary的构造函数。

Dictionary() : _list(), IEnumerable(_list.Count) 
{ } 

我从 “初始化” 列表IEnumerable通过const unsigned int&。问题是,IEnumerable的初始化程序在_list的(List类型的成员)之前被调用,所以我传递了无效的引用。

有没有办法强制成员_list在基类IEnumerable之前初始化?

+0

如何设置'List'的'Count'数据成员?这是一个参考,所以它必须提到某件事。它在_list的构造函数中被设置为 – juanchopanza 2013-02-10 21:54:58

+0

。但是,这是基地后 – 2013-02-10 22:00:18

基本类总是在直接成员之前初始化。 (实际上,mem-initializer-list中的基础和成员的顺序什么都不做 - 顺序总是从类定义中确定的。)

一种解决方法是将您的成员移动到另一个基类。

struct HasList { 
    List _list; 
    // Might want custom constructors here. 
}; 

class Dictionary 
    : private HasList, 
     public IEnumerable 
{ 
    // ... 

(这是private继承的一些有用的用途之一。)

+0

哦,我明白了。我喜欢!听起来很新颖。我想我会这样做:) – 2013-02-10 22:01:27

+0

完美!再次感谢。它甚至不需要对现有代码进行任何重大更改:) – 2013-02-10 22:11:01

  1. 在继承类的构造函数之前调用基类构造函数。
  2. 成员初始化的顺序是,声明为(通常在头文件中),初始化列表的顺序是不相关的。