c++ - 是否可以为 std::array 类型添加自己的构造函数?

标签 c++ c++14 stdvector stdarray constructor-overloading

我尝试为 std::array 添加自己的构造函数类型,但我不确定是否可能以及如何做到这一点...

我试过这样的:

typedef unsigned char byte_t;

namespace std {
  template<std::size_t _Nm>
  array::array(std::vector<byte_t> data)
  {
    // Some content
  }
}

我想创建一个非常简单的机制来转换 std::vector<byte_t>std::array<byte_t, size> .

  1. 有可能吗?
  2. 我该怎么做?

我正在使用 C++14(我不能在我的项目中使用更新的标准)

最佳答案

构造函数是特殊的成员函数,它们必须在类定义中声明。在不更改类定义的情况下,不可能向现有类添加构造函数。

您可以使用工厂函数实现类似的效果:

template<size_t N, class T>
std::array<T, N> as_array(std::vector<T> const& v) {
    std::array<T, N> a = {};
    std::copy_n(v.begin(), std::min(N, v.size()), a.begin());
    return a;
}

int main() {
    std::vector<byte_t> v;
    auto a = as_array<10>(v);
}

关于c++ - 是否可以为 std::array 类型添加自己的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51420078/

相关文章:

c++ - 结构如何继承自身?

c++ - 为什么 g++ 10.1 会提示头文件中的命名 lambda 而其他人则不会?

c++ - 使用另一个类对象的 std::vector 类

c++ - 继承类的 vector

c++ - 升压信号连接管理

c++ - C++中有符号到无符号的转换

c++ - 为什么我在这里遇到段错误?

c++ - 访问 GDB 中的 vector 项

c++ - Base 2 到 Base 10 转换器不能处理非常大的数字?

c++ - Armadillo的cx_mat和Boost的odeint编译报错