It sounds like embind currently does not support forward-declared classes
because some information about the type definition is necessary at bind
type: how to copy the value, destroy it, and so on.

It's probably possible to add support for this functionality.  I wonder if
there is a way using C++ templates to determine whether a type is declared
or declared-and-defined at bind time.

If not, perhaps an API something like...

opaque_handle<C>("C");

... would work.  You wouldn't be able to bind member functions or
constructors or destructors or anything, but you could pass C* pointers
around as opaque integers.


On Wed, Nov 19, 2014 at 8:46 AM, <[email protected]> wrote:

> OK, it's not the virtual function. It's because this class is referenced
> in an other file just with "class GuidoParser;" and not with the include
> file definition.
>
>
> Le mercredi 19 novembre 2014 17:02:44 UTC+1, [email protected] a
> écrit :
>
>> Thanks, I try it and it work for my simple example.
>>
>> But in my project, the class has virtual methods (but no pure virtual)...
>> and I have now this error :
>> incomplete type 'GuidoParser' used in type trait expression
>>     : public integral_constant<bool, __is_polymorphic(_Tp)> {};
>>
>> Any idea ?
>>
>> Le mercredi 19 novembre 2014 16:13:00 UTC+1, jj a écrit :
>>>
>>> You can register that class without anything exposed on it, which will
>>> allow you to pass pointers to it around in a black-box manner.
>>>
>>> 2014-11-19 17:07 GMT+02:00 <[email protected]>:
>>>
>>>> Hi,
>>>>
>>>> I try to pass object pointer argument to method of an embind class. The
>>>> objet pointer argument is not a embind class.
>>>> Here a example of code :
>>>>
>>>> #include <emscripten.h>
>>>> #include <bind.h>
>>>>
>>>> using namespace emscripten;
>>>>
>>>>
>>>>   class A {
>>>>       public:
>>>>           A () {
>>>>               a=5;
>>>>           }
>>>>           void add() {
>>>>               a = a+1;
>>>>           }
>>>>           int get() {
>>>>               return a;
>>>>           }
>>>>       private:
>>>>           int a;
>>>>   };
>>>>
>>>>   class B {
>>>>       public:
>>>>           B () {
>>>>               b=10;
>>>>           }
>>>>           void add() {
>>>>               b = b+1;
>>>>           }
>>>>           int get() {
>>>>               return b;
>>>>           }
>>>>
>>>>           A* getA() {
>>>>               return new A;
>>>>           }
>>>>
>>>>           void addA(A* a) {
>>>>               b+=a->get();
>>>>           }
>>>>       private:
>>>>           int b;
>>>>   };
>>>>
>>>>
>>>> EMSCRIPTEN_BINDINGS(test) {
>>>>     class_<B>("B")
>>>>           .constructor<>()
>>>>           .function("add",&B::add)
>>>>           .function("get",&B::get)
>>>>           .function("getA",&B::getA, allow_raw_pointers())
>>>>           .function("addA",&B::addA, allow_raw_pointers())
>>>>           ;
>>>> }
>>>>
>>>> My javascript code :
>>>>
>>>> var B = new Module.B;
>>>> var A = B.getA();
>>>> B.addA(A);
>>>>
>>>> I get the following error : "ReferenceError: getTypeName is not defined"
>>>> I suppose it's because the class A is not embind. I work with big class
>>>> I don't have to manipulate in javascript, I just have a pointer.
>>>>
>>>> Is it possible to use pointer on class which are not embind ? (like
>>>> cwrap which return an integer for a pointer)
>>>>
>>>>  --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "emscripten-discuss" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>  --
> You received this message because you are subscribed to the Google Groups
> "emscripten-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Chad Austin
Technical Director, IMVU
http://engineering.imvu.com <http://www.imvu.com/members/Chad/>
http://chadaustin.me

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to