不能在 Emscripten 绑定中使用 unique_ptr 的向量

Can't use vector of unique_ptr in Emscripten bindings

我正在尝试用 Emscripten Bindings 绑定一些变量。问题是当我想绑定 unique_ptr 的向量时,emscripten 尝试复制每个条目,这显然会导致编译错误。

error: call to implicitly-deleted copy constructor of 'std::__1::unique_ptr ...

note: copy constructor is implicitly deleted because 'unique_ptr<...>' has a user-declared move constructor

但是在emscripten的文档中,他们说支持unique_ptr。

代码:

class MyClass {
public:
    using Entities = std::vector<std::unique_ptr<Entity>>;
public:
    auto entities() const -> Entities const & { return _entities; }
private:
    Entities _entities;
};

EMSCRIPTEN_BINDINGS(MyClass) {
    emscripten::class_<MyClass>("MyClass")
        .property("entities", &MyClass::entities);
}

我可以用简单的指针复制向量,但这不是真正的解决方案。 emscripten中有一个特殊的option/policy来处理unique_ptr ?

编辑

emscripten 似乎不支持向量中的 unique_ptr。所以为了避免数据重复,直接获取vector上的一个条目的函数return指针可能是一个很好的解决方案。

classunique_ptr只能移动而不能复制。看来无论BINDINGS宏正在做的是在内部复制向量中的对象。由于复制需要有一个复制构造函数,并且 unique_ptr 的复制析构函数已经 deleted,所以您会遇到编译器错误。解决方法可能是复制 Entity 并为其构造一个单独的 unique_ptr

来自文档

embind has built-in support for return values of type std::unique_ptr.

我对此进行解释的方式是它内置了对 return 类型 std::unique_ptr 的函数的支持。它没有提到支持具有不可复制成员的容器