【问题标题】:Extract multiple types from tuple从元组中提取多种类型
【发布时间】:2016-11-14 07:26:05
【问题描述】:

这应该很明显,是否有一些简短的语法来获取子元组?

类似的东西:

std::tuple<std::string, double, int> myTuple;
std::tuple<std::string, int> subTuple = std::get<std::string, int>(myTuple);

【问题讨论】:

  • std::tuple&lt;std::string, int&gt; subTuple { std::get&lt;0&gt;(myTuple), std::get&lt;2&gt;(myTuple) };?
  • 两个get有什么问题?我相信您可以使用一些元模板技巧使其更通用,但这值得吗?
  • @rubenvb,我以为标准库有这个。

标签: c++ c++11 tuples


【解决方案1】:

您可以使用std::tie (reference):

std::tuple<std::string, double, int> myTuple = ...;
std::string a;
int b;
std::tie(a, std::ignore, b) = myTuple;

【讨论】:

    【解决方案2】:

    你需要自己制作模板函数,下面这个实现需要C++14(因为需要std::get&lt;T&gt;,你可以自己用C++11实现):

    template<typename... R, typename ...Args>
    std::tuple<R...> sub_tuple(const std::tuple<Args...>& original) {
        return std::make_tuple(std::get<R>(original)...);
    }
    
    int main()
    {
        std::tuple<std::string, double, int> myTuple = std::make_tuple("Hello", 1201.0, 51);
        std::tuple<std::string, int> subTuple = sub_tuple<std::string, int>(myTuple);
        std::cout << std::get<0>(subTuple) << "            " << std::get<1>(subTuple);
    }
    

    注意:这将为原始元组中的每个元素创建一个副本

    【讨论】:

      猜你喜欢
      • 2020-08-14
      • 2021-02-21
      • 1970-01-01
      • 2013-05-31
      • 2020-07-14
      • 2019-03-11
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多