我一直在研究initializer_list
是如何实现的,所以我找到了该标准的18.9节,并找到了一个看起来足够简单的接口。我认为制作我自己的版本(我将其命名为MyNamespace::InitializerList
)和一个用例会很有启发性:
template<class T>
class ArrayPrinter
{
public:
ArrayPrinter(MyNamespace::InitializerList<T> list)
{
for (auto i : list) cout << i << endl;
}
};
...
ArrayPrinter ap{ {1,2,3} };
我惊讶地发现这不起作用,编译器抱怨说它找不到合适的构造函数(它想给我3个参数,但18.9节只描述了一个默认构造函数)。
经过一些修改之后,我发现我的类必须准确地命名为std::initializer_list
才能工作。我也可以在MyNamespace
中使用std::initializer_list
别名,但不能将MyNamespace::InitializerList
别名为std::initializer_list
。
看起来这并不是真正的language feature as it depends on the standard library
我的问题的要点是为什么名称如此重要,以及它试图传递给构造函数的3个参数是什么?
https://stackoverflow.com/questions/18164353
复制相似问题