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

Initializing array with results of variadic class template type's member function?

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

template<typename ...Ts>
struct SomeStruct {
    
    std::tuple<Ts...> some_tuple;

}

... 我确定从 Ts 扩展的任何类型都共享一个基础 class,因此某些成员函数 returns 某些类型 R .

我怎样才能收集在 Ts 中的每种类型上调用该成员函数的结果,例如在 std::array< R, sizeof...(Ts) > 中?

鉴于所有 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()