不能在 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
的复制析构函数已经 delete
d,所以您会遇到编译器错误。解决方法可能是复制 Entity
并为其构造一个单独的 unique_ptr
。
来自文档
embind has built-in support for return values of type std::unique_ptr.
我对此进行解释的方式是它内置了对 return 类型 std::unique_ptr
的函数的支持。它没有提到支持具有不可复制成员的容器
我正在尝试用 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
的复制析构函数已经 delete
d,所以您会遇到编译器错误。解决方法可能是复制 Entity
并为其构造一个单独的 unique_ptr
。
来自文档
embind has built-in support for return values of type std::unique_ptr.
我对此进行解释的方式是它内置了对 return 类型 std::unique_ptr
的函数的支持。它没有提到支持具有不可复制成员的容器