初始化一个非默认构造元素的std ::数组?
假设使用命名的构造函数iDOM,make_foo()
type foo_t
。现在,我想完全拥有123个Foo-不再,不少。因此,我正在考虑std :: array< foo_t,123>
。现在,如果foo_t
是默认构造的,我会写:
std::array<foo_t, 123> pity_the_foos;
std::generate(
std::begin(pity_the_foos), std::end(pity_the_foos),
[]() { return make_foo(); }
);
鲍勃是我的叔叔,对吗?不幸的是... foo_t
没有默认的ctor。
那么,我应该如何初始化阵列?我是否需要使用一些变异模板扩展Voodoo?
注意:答案可能会使用C ++ 11,C ++ 14或C ++ 17中的任何内容。
Suppose type foo_t
with a named constructor idiom, make_foo()
. Now, I want to have exactly 123 foo's - no more, no less. So, I'm thinking about an std::array<foo_t, 123>
. Now, if foo_t
were default-constructible, I would write:
std::array<foo_t, 123> pity_the_foos;
std::generate(
std::begin(pity_the_foos), std::end(pity_the_foos),
[]() { return make_foo(); }
);
and Bob's my uncle, right? Unfortunately... foo_t
has no default ctor.
How should I initialize my array, then? Do I need to use some variadic template expansion voodoo perhaps?
Note: Answers may use anything in C++11, C++14 or C++17 if that helps at all.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
通常。
The usual.