I'll check it out, thanks :) --Zac
On Mon, Feb 15, 2016 at 2:06 AM, Jochen Eisinger <[email protected]> wrote: > we have a light-weight wrapper library in chromium called gin: > https://code.google.com/p/chromium/codesearch#chromium/src/gin/wrappable_unittest.cc&sq=package:chromium > has > some examples on how to use it. > > Maybe you can build something similar with RTTI > > On Mon, Feb 15, 2016 at 11:04 AM Jochen Eisinger <[email protected]> > wrote: > >> ah yes, in chromium (and v8) we compile without RTTI, so we can't rely on >> dynamic_cast. But yes, you can store a AnyBase* in the internal field and >> then use a huge type switch to figure out the actual class. >> >> Note that you still need a function that knows about all types you >> possible have in your system (the typeswitch).. >> >> On Fri, Feb 5, 2016 at 1:53 PM Zac Hansen <[email protected]> wrote: >> >>> I think I did find it in WrapperTypeInfo.h. And while I don't >>> understand exactly how it works, I'm guessing it requires each class that >>> contains a static WrapperTypeInfo to configure it in such a way that it can >>> retrieve information like what derived classes are and such? >>> >>> I'm trying to write something that can work with arbitrary classes.. my >>> current solution is to allow users to make an explicit list if which >>> classes can be substituted in when a certain type is wanted. It uses >>> sfinae to make sure the specified types are derived types. >>> >>> Basically >>> wrap_class_for_js<MyClass>().add_compatible_types<MyClassChild, >>> MyClassGrandChild>(); >>> >>> so when you say "some_function(new MyClassChild())" in javascript, my >>> callback says "Is the GetInternalField of the v8::Object a MyClass? No? >>> Then let me try the compatible types. Is it a MyClassChild? Yes. Ok, >>> send the pointer in". If it makes it to the end of the compatible type >>> list without a match, it throws an exception (which is wrapped in a >>> isoalte->ThrowException() before control returns to V8). >>> >>> The thing I put int the InternalField v8::External is actually an >>> "AnyBase*" which is a base class of all Any<T> objects.. so I can use >>> dynamic_cast to do the testing of whether the type is a desired type or not. >>> >>> -- >>> -- >>> v8-users mailing list >>> [email protected] >>> http://groups.google.com/group/v8-users >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "v8-users" 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. >>> >> -- > -- > v8-users mailing list > [email protected] > http://groups.google.com/group/v8-users > --- > You received this message because you are subscribed to a topic in the > Google Groups "v8-users" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/v8-users/rr4CkYpoZBY/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" 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.
