C++11 C++;11是否可以构造一个std::initializer\u列表?

C++11 C++;11是否可以构造一个std::initializer\u列表?,c++11,initializer-list,C++11,Initializer List,我有一个类,它使用std::discrete_分布,可以使用std::initializer_列表或几个迭代器。我的类在某种程度上包装了离散分布,因此我真的很想模拟获取std::initializer\u列表的能力,然后将其传递下去 这很简单 但是,std::initializer_list总是通过一些未知值来构造。所以,如果它只是一个std::discrete_发行版,我会从某个容器的迭代器中构造。然而,为了通过我的类使其可用,我需要为迭代器类型模板化类 我不想模板化我的类,因为它只是偶尔会使

我有一个类,它使用
std::discrete_分布
,可以使用
std::initializer_列表
或几个迭代器。我的类在某种程度上包装了
离散分布
,因此我真的很想模拟获取
std::initializer\u列表
的能力,然后将其传递下去

这很简单

但是,
std::initializer_list
总是通过一些未知值来构造。所以,如果它只是一个
std::discrete_发行版
,我会从某个容器的迭代器中构造。然而,为了通过我的类使其可用,我需要为迭代器类型模板化类

我不想模板化我的类,因为它只是偶尔会使用
初始值设定项\u list
,在不使用的情况下,它会使用
std::uniform\u int\u distribution
,这会使这个模板参数变得混乱


我知道我可以默认使用模板参数,并且我知道如果需要,我只能定义
vector::iterator
s;我不想。

根据文档,在标准C++中不能是非空构造。顺便说一句,对于C

va_list
(可能出于类似的原因,因为变量函数参数传递是特定于实现的,通常有其自身的特性;请参见)

<>代码> STD::CalpaliSeriSList在C++编译器中是已知的(同样,代码> <代码>使用C编译器中的一些内置的东西),并有特殊的支持。 C++11标准(更确切地说,它的草案几乎完全相同)在§18.9.1中说,
std::initializer_list
只有一个空构造函数,并且引用了§8.5.4列表初始化

您可能应该在您的案例中使用
std::vector
及其迭代器

根据经验和直觉,
std::initializer_list
对于编译时已知的参数列表非常有用,如果您想要处理运行时已知的参数(编译时“参数”的“数量”未知),那么您应该为这种情况提供一个构造函数(以一些迭代器或一些容器作为参数)


如果您的类有一个接受
std::initializer\u list
的构造函数,那么它可能应该有另一个接受
std::vector
std::list
(或者如果您有一些可交换性,
std::set
),那么您就不需要在迭代器上使用一些奇怪的模板。顺便说一句,如果你想要迭代器,你会模板化构造函数,而不是整个类。

我猜
std::uniform_distribution_list
是一个打字错误,我不知道你真正想写什么。我回答了,但你应该在问题中给出一些代码;这会让事情变得更清楚。