Dre*_*rew 18 c++ vector std c++11 stdarray
我有一个std::array<Foo, 10>,我想一个创建std::array<Bar, 10>使用函数从Foo到Bar.通常我会这样使用std::transform:
array<Bar, 10> bars;
transform(foos.begin(), foos.end(), bars.begin(), [](Foo foo){
return Bar(foo.m_1, foo.m_2);
});
Run Code Online (Sandbox Code Playgroud)
但是,Bar没有默认构造函数,所以我无法创建bars数组.我总是可以使用,vector但能够array用来保证我总是有10个元素会很好.那可能吗?
T.C*_*.C. 16
没有std::transform,但没有一点模板魔法无法修复.
template<std::size_t N, std::size_t... Is>
std::array<Bar, N> foos_to_bars(const std::array<Foo, N>& foos,
std::index_sequence<Is...>) {
return {{ Bar(foos[Is].m_1, foos[Is].m_2)... }};
}
template<std::size_t N, std::size_t... Is>
std::array<Bar, N> foos_to_bars(const std::array<Foo, N>& foos) {
return foos_to_bars(foos, std::make_index_sequence<N>());
}
Run Code Online (Sandbox Code Playgroud)
std::index_sequence和朋友是C++ 14,但在C++ 11中很容易实现.仅在SO上可能有六个实现.
| 归档时间: |
|
| 查看次数: |
1632 次 |
| 最近记录: |