无法在Emscripten绑定中使用unique_ptr的向量

时间:2015-08-04 16:03:54

标签: c++ c++11 vector smart-pointers emscripten

我试图用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中有一个特殊的选项/策略来处理unique_ptr?

修改

看起来emscripten并不支持向量中的unique_ptr。因此,为避免重复数据,直接在返回指针的向量上获取一个条目的函数可能是一个很好的解决方案。

2 个答案:

答案 0 :(得分:2)

来自文档

  

embind内置支持std :: unique_ptr类型的返回值。

我与之交互的方式是它内置了对返回类型为std::unique_ptr的函数的支持。它没有提到支持具有不可复制的成员的容器

答案 1 :(得分:0)

unique_ptr只能移动而不是复制。看来BINDINGS宏正在做的是在内部制作对象的副本。向量。由于复制需要具有复制构造函数并且unique_ptr的复制析构函数已经delete d,因此您将获得该编译器错误。解决方法可能是复制Entity并为其构建单独的unique_ptr