具有原始数据指针和emscripten的对象

时间:2016-09-22 07:20:06

标签: c++ pointers emscripten

改述问题:

当我不知道数组的长度是否为先验时,我应该如何绑定一个函数,该函数将一个带有数组的对象作为成员变量从C / C ++ API返回到javascript?

我有一个带有原始数据类型指针的结构

struct Person
{
    const char* name;
    int age;
    Person()
    {}
};

我有一个函数应该返回这个结构的对象

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()(及其变体)添加到.field的{​​{1}}。

1 个答案:

答案 0 :(得分:2)

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);
    */