2016-09-22 3 views
2

emscripten :기본 데이터 포인터 개체 및 질문 다른 표현

내가 자바 스크립트에 대한 C/C++ API에서 멤버 변수로 배열 객체를 반환하는 함수를 결합하는 방법을 모르겠어요를 배열의 길이는 선험적입니까?


I는 기본 데이터 형식 포인터

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

갖는 구조체를 가지고 I 칠이이 구조체

Person getPerson() 
{ 
    Person p = Person(); 
    p.name = "Philipp"; 
    p.age = 77; 
    return p; 
} 

의 오브젝트와 다음 embindings 반환해야하는 기능을 가지고

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을 이해하려고했지만 작동하지 못했습니다. 예 : 난 .fieldnameallow_raw_pointer() (및이 변종)을 추가하려고했습니다.

답변

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

답장을 보내 주셔서 감사합니다. 내가 받아들이 기 전에 std :: string을 사용하지 않고 const char *를 getter에 반환하는 것이 가능한지 궁금합니다. – Philipp

+1

필자가 아는 한'(...). function ("namePtr", & getPersonNamePtr, allow_raw_pointers())와 같은 것은 컴파일 할 수 있지만 런타임 오류가 발생합니다. http://stackoverflow.com/questions/20355880/emscripten-how-can-i-solve-unboundtypeerror – zakki