假设我有一个模板类型。。。
template<typename ...Ts>
struct SomeStruct {
std::tuple<Ts...> some_tuple;
}
其中,我确信从Ts
扩展的任何类型都共享一个基类,从而共享返回某种类型R
的某个成员函数。
我该如何收集对Ts
中的每个类型调用该成员函数的结果,例如在std::array< R, sizeof...(Ts) >
中?
假设所有Ts...
元素都支持foo()
方法,返回一个R
值,如果可以使用C++17 ,我想您可以使用std::apply()
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);
使用CCD_ 9演绎指南。
如果只能使用C++14,则可以使用std::make_index_sequence
/std::index_sequence
来模拟std::apply()