【问题标题】:Initializing array with results of variadic class template type's member function?使用可变参数类模板类型的成员函数的结果初始化数组?
【发布时间】:2020-08-07 21:46:51
【问题描述】:
假设我有一个模板类型...
template<typename ...Ts>
struct SomeStruct {
std::tuple<Ts...> some_tuple;
}
...我确信从Ts 扩展的任何类型都共享一个基类,因此一些返回某些类型R 的成员函数。
我怎样才能收集在Ts 中的每种类型(例如std::array< R, sizeof...(Ts) >)中调用该成员函数的结果?
【问题讨论】:
标签:
c++
templates
c++17
variadic-templates
【解决方案1】:
鉴于所有Ts... 元素都支持foo() 方法,返回一个R 值,我想你可以使用std::apply(),如果你可以使用C++17
std::apply([](auto ... vals)
{ return std::array<R, sizeof...(vals)>{ vals.foo()... }; },
some_tuple);
或者干脆
std::apply([](auto ... vals)
{ return std::array { vals.foo()... }; },
some_tuple);
使用std::array推导。
如果只能使用 C++14,则可以使用 std::make_index_sequence/std::index_sequence 模拟 std::apply()