【发布时间】:2015-12-14 02:51:51
【问题描述】:
我有一个简单的例子,我创建了一些 Foo 元素的std::array:
struct Foo
{
Foo(int bar=0) : m_bar(bar)
{
// Code depending on the value of bar
}
int m_bar;
};
const unsigned int num = // get array size
std::array<Foo, num> fooArr;
当我在构造函数m_bar(bar) 中使用初始化列表时,这会将所有Foo.m_bar 设置为0(因为这是默认构造函数参数值)。如果我不这样做,那么它就会充满垃圾值。
我的问题是如何在事先不知道数组大小的情况下将另一个不同于默认值的值传递给数组中每个元素的构造函数?
我在创建数组时尝试使用初始化列表,如下所示:std::array<Foo, 5> fooArr{3},但这只会将第一个元素的 m_bar 设置为 3。
【问题讨论】:
-
fooArr{{1,2,3,4,5}} 怎么样?
-
对不起,不是很清楚,但我不应该事先知道数组大小,才能做到这一点。我已经相应地编辑了问题。
-
在 Cppreference 中有这个例子: std::array<:string> a3 = { std::string("a"), "b" };是你要找的吗?
-
你知道编译时的大小还是由预处理器定义的?
-
std::array<Foo, 5>和“不知道数组大小”让事情变得不清楚。
标签: c++ arrays c++11 initialization stdarray