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
之前初始化?
基本类总是在直接成员之前初始化。 (实际上,mem-initializer-list中的基础和成员的顺序什么都不做 - 顺序总是从类定义中确定的。)
一种解决方法是将您的成员移动到另一个基类。
struct HasList {
List _list;
// Might want custom constructors here.
};
class Dictionary
: private HasList,
public IEnumerable
{
// ...
(这是private
继承的一些有用的用途之一。)
哦,我明白了。我喜欢!听起来很新颖。我想我会这样做:) – 2013-02-10 22:01:27
完美!再次感谢。它甚至不需要对现有代码进行任何重大更改:) – 2013-02-10 22:11:01
- 在继承类的构造函数之前调用基类构造函数。
- 成员初始化的顺序是,声明为(通常在头文件中),初始化列表的顺序是不相关的。
如何设置'List'的'Count'数据成员?这是一个参考,所以它必须提到某件事。它在_list的构造函数中被设置为 – juanchopanza 2013-02-10 21:54:58
。但是,这是基地后 – 2013-02-10 22:00:18