【问题标题】: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&lt; R, sizeof...(Ts) &gt;)中调用该成员函数的结果?

【问题讨论】:

    标签: 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()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多