【问题标题】:How do I pick the bigger data type for my array?如何为我的数组选择更大的数据类型?
【发布时间】:2020-05-09 19:06:29
【问题描述】:

我的函数采用两个数组,它们存储原始数据类型的数据。

我想为我的result 数组选择更大的数据类型以防止数据丢失 向数组中插入值时。

例如:第一个数组存储整数和第二个双精度数。 result 数组应该是双精度的。

template<std::size_t length, typename A1, typename A2>
constexpr auto function(A1 array1, A2 array2){
    //e.g array1 ints, array2 doubles
    //do calculations and insert values into result array
    std::array< ???, length> result{};
    return array3;
}

【问题讨论】:

  • 一般还是仅用于预定义类型?你可以简单地比较一下我认为的 sizeofs...
  • @BartekBanachewicz 输入数组将具有一种原始数据类型。可以是任何东西,我只想拿更大的。

标签: c++ arrays types


【解决方案1】:

std::common_type 来救援。只要有两种数组元素类型都可以转换为的类型,它就会为您提供该类型。所以对于intdoublestd::common_type 会给你double。您可以将它用于您的数组,例如

std::array<std::common_type_t<A1::value_type, A2::value_type>, length> result{};

【讨论】:

    【解决方案2】:

    std::common_type:

    确定所有类型 T... 中的通用类型,即所有 T... 都可以隐式转换为的类型。如果存在这样的类型(根据以下规则确定),则成员类型命名该类型。否则,没有成员类型。

    【讨论】:

      【解决方案3】:

      作为@foreknownas_463035818 cmets,你要使用std::common_type

      template<std::size_t length, typename A1, typename A2>
      constexpr auto function(A1 array1, A2 array2){
          //e.g array1 ints, array2 doubles
          //do calculations and insert values into result array
          std::array<std::common_type<A1::value_type, A2::value_type>, length> result{};
          return array3;
      }
      

      【讨论】:

      • 不需要给分,评论已经消失了(我正在考虑尽快改变我的昵称,只是在等待一个好主意;)
      • 原名_原名_463035818怎么样? :-)
      • @PaulEvans 我知道你在 Recursion 先生那里做了什么。
      • @alsoknowmas_463035818 王子后来被称为 TAFKAP(原名王子的艺术家)。也许这可以激励你。
      猜你喜欢
      • 2011-08-03
      • 2020-06-08
      • 2011-08-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      相关资源
      最近更新 更多