我正在从C API获取数组,我想将其复制到std::array以便在我的C++代码中进一步使用。那么正确的做法是什么呢?

我2为此使用,一个是:

struct Foo f; //struct from C api that has a uint8_t kasme[32] (and other things)

c_api_function(&f);
std::array<uint8_t, 32> a;
memcpy((void*)a.data(), f.kasme, a.size());

还有这个
class MyClass {
  std::array<uint8_t, 32> kasme;
  int type;
public:
  MyClass(int type_, uint8_t *kasme_) : type(type_)
  {
      memcpy((void*)kasme.data(), kasme_, kasme.size());
  }
  ...
}
...
MyClass k(kAlg1Type, f.kasme);

但这感觉很笨拙。是否有一种惯用的方式做到这一点,大概不涉及memcpy?对于MyClass`,也许我最好与
构造函数采用std::array并移入该成员,但我也无法找出执行该操作的正确方法。 ?

最佳答案

您可以使用在 header std::copy中声明的<algorithm>算法。例如

#include <algorithm>
#include <array>

//...

struct Foo f; //struct from C api that has a uint8_t kasme[32] (and other things)

c_api_function(&f);
std::array<uint8_t, 32> a;
std::copy( f.kasme, f.kasme + a.size(), a.begin() );

如果f.kasme确实是一个数组,那么您也可以编写
std::copy( std::begin( f.kasme ), std::end( f.kasme ), a.begin() );

08-06 21:02