具有原始数据指针和 emscripten 的对象
Objects with primitive data pointers and emscripten
改写问题:
当我不这样做时,我应该如何绑定一个函数,该函数 return 是一个带有数组作为成员变量的对象,从 C/C++ API 到 javascript不知道数组的先验长度?
我有一个带有原始数据类型指针的结构
struct Person
{
const char* name;
int age;
Person()
{}
};
我有一个函数应该return这是这个结构的一个对象
Person getPerson()
{
Person p = Person();
p.name = "Philipp";
p.age = 77;
return p;
}
和以下嵌入:
EMSCRIPTEN_BINDINGS() {
value_object<Person>("Person")
.field("age", &Person::age)
.field("name", &Person::name)
;
function("getPerson", &getPerson);
}
这行不通,编译器也告诉我 static_assert failed "Implicitly binding raw pointers is illegal. Specify allow_raw_pointer<arg<?>>"
我试图理解 API documentation 但我无法让它发挥作用。例如。我试图将 allow_raw_pointer()
(及其变体)添加到 name
的 .field
。
class_::property
可以指定getter和setter函数。
std::string getPersonName(const Person& p) {
return p.name;
}
EMSCRIPTEN_BINDINGS() {
class_<Person>("Person")
.property("age", &Person::age)
.property("name", &getPersonName)
;
function("getPerson", &getPerson);
}
/*
var p = Module.getPerson();
console.log(p);
console.log(p.age);
console.log(p.name);
*/
改写问题:
当我不这样做时,我应该如何绑定一个函数,该函数 return 是一个带有数组作为成员变量的对象,从 C/C++ API 到 javascript不知道数组的先验长度?
我有一个带有原始数据类型指针的结构
struct Person
{
const char* name;
int age;
Person()
{}
};
我有一个函数应该return这是这个结构的一个对象
Person getPerson()
{
Person p = Person();
p.name = "Philipp";
p.age = 77;
return p;
}
和以下嵌入:
EMSCRIPTEN_BINDINGS() {
value_object<Person>("Person")
.field("age", &Person::age)
.field("name", &Person::name)
;
function("getPerson", &getPerson);
}
这行不通,编译器也告诉我 static_assert failed "Implicitly binding raw pointers is illegal. Specify allow_raw_pointer<arg<?>>"
我试图理解 API documentation 但我无法让它发挥作用。例如。我试图将 allow_raw_pointer()
(及其变体)添加到 name
的 .field
。
class_::property
可以指定getter和setter函数。
std::string getPersonName(const Person& p) {
return p.name;
}
EMSCRIPTEN_BINDINGS() {
class_<Person>("Person")
.property("age", &Person::age)
.property("name", &getPersonName)
;
function("getPerson", &getPerson);
}
/*
var p = Module.getPerson();
console.log(p);
console.log(p.age);
console.log(p.name);
*/