从较小的 std::array 构建 std:array

Construct an std:array from a smaller std::array

我有一个模板 class 定义内部 std::array 中元素的数量。我将如何从一个更大的对象构造一个新对象。到目前为止,我已经定义了复制构造函数,但这些构造函数无法编译,因为没有适合不同大小的 std::array 的构造函数。

当前class定义:

template<uint32_t MAX_LENGTH>
class A 
{
  A() = default;
  ~A() override = default;

  A(const A<MAX_LENGTH>& rhs) :
    current_length_(rhs.get_length()),
    data(rhs.get_data_const())
  { }

  template<uint32_t MAX_LENGTH_RHS, std::enable_if_t<(MAX_LENGTH_RHS < MAX_LENGTH), int> = 0>
  A(const A<MAX_LENGTH_RHS>& rhs) :
    current_length_(rhs.get_length()),
    data(rhs.get_data_const())
  { }

  template<uint32_t MAX_LENGTH_RHS, std::enable_if_t<(MAX_LENGTH_RHS < MAX_LENGTH), int> = 0>
  A(const A<MAX_LENGTH_RHS>&& rhs) :
    data(rhs.get_data_const())
  { }

  const std::array<int, MAX_LENGTH>& get_data_const() const { return data; }
 
  private:
    std::array<int, MAX_LENGTH> data;
} 

我要编译的内容:

A<5> a5;
// Set some data in a5.

// Next copy construct a larger object and set the data from a5 in it.
A<10> a10(a5); 

因为这失败并出现错误:

error: no matching function for call to ‘std::array<10>::array(const std::array<5>&)’
   5 |         data_(rhs.get_data_const())

那么当源对象的大小较小时,如何在复制构造函数初始化列表中初始化一个 std::array

用像这样简单一些的东西代替你得到的复制构造函数怎么样:

  template<uint32_t MAX_LENGTH_RHS, /*enable_if...*/>
  A(const A<MAX_LENGTH_RHS>& rhs) {
      const auto& rhs_data = rhs.get_data_const();
      std::copy(rhs_data.begin(), rhs_data.end(), data.begin());
  }