C++ Can';t在Emscripten绑定中使用唯一的_ptr向量

C++ Can';t在Emscripten绑定中使用唯一的_ptr向量,c++,c++11,vector,smart-pointers,emscripten,C++,C++11,Vector,Smart Pointers,Emscripten,我正在尝试将一些变量与绑定。问题是当我想绑定一个唯一的向量时,emscripten会尝试复制每个条目,这显然会导致编译错误 错误:调用隐式删除的复制构造函数'std::\uu 1::unique\u ptr… 注意:复制构造函数被隐式删除,因为“unique\u ptr”有一个用户声明的移动构造函数 但在emscripten的文档中,他们表示支持unique_ptr 代码: class-MyClass{ 公众: 使用Entities=std::vector; 公众: 自动实体()常量->实体常量

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

错误:调用隐式删除的复制构造函数'std::\uu 1::unique\u ptr…

注意:复制构造函数被隐式删除,因为“unique\u ptr”有一个用户声明的移动构造函数

但在emscripten的文档中,他们表示支持unique_ptr

代码:

class-MyClass{
公众:
使用Entities=std::vector;
公众:
自动实体()常量->实体常量&{return\u entities;}
私人:
实体(u实体),;
};
EMSCRIPTEN_绑定(MyClass){
emscripten::class_uu(“MyClass”)
.property(“实体”和MyClass::实体);
}
我可以用简单的指针复制向量,但这不是一个真正的解决方案。emscripten中有一个特殊选项/策略来处理唯一的ptr

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

unique\u ptr
只能移动,不能复制。看起来BINDINGS宏所做的一切都是在向量内部复制对象。由于复制需要有一个复制构造函数和
unique\ptr
的复制析构函数已被
delete
d,因此您会遇到编译器错误。解决方法可能是复制
实体
,并为其构建一个单独的
唯一的\u ptr

embind内置了对std::unique\u ptr类型的返回值的支持


我解释这一点的方式是,它内置了对返回类型为
std::unique_ptr
的函数的支持。它没有提到支持包含不可复制Memeber的容器

如果你能想到简单的指针,为什么不使用shared_ptr而不是unique_ptr?当然它可以与shared_ptr一起使用,但是在这种情况下,没有emscripten使用shared_ptr是没有意义的。即使emscripten可以支持它,这意味着什么?Javascript是否能够访问它自己的向量副本(您需要找到一种方法来复制所有
唯一的\u ptr
s),或者它是否可以访问原始向量,可能是通过指向向量的指针?如果后者可以接受,您是否可以执行
std::shared\u 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);
}