使用可变参数类模板类型的成员函数的结果初始化数组?



假设我有一个模板类型。。。

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()

最新更新