First, is the Function callback calling a C++ native function, a JS
function or another C++ defined Function callback?  Providing some
code might make the issue more obvious.

Second, v8.h has all the JS ("container") types defined.  Start there
when defining variables.  You can often use the v8 type when going
between JS-land and C++-land.  Things like:
```
   v8::Array arr = Array::New( isolate, len );
   v8::Integer i = Integer::New( isolate, ivalue );
```

If you're converting the callback's parameters to a native type:
```
   String::Utf8Value str( args[ 0 ] );
   char* ascii = *str; // * is overloaded to return an ASCII C string
   int n = ( int )( args[ 1 ]->Int32Value() );
```

Once you have the parameter in the v8 type or C++ type, you can pass
them appropriately.

If you're hard up for the wrapper approach, then Stephen Beal had an
extensive template based solution that is probably 18-24 months
out-of-date (read: extensively out of date) and then there's node.js'
wrapper object approach.

-L

On Thu, Feb 4, 2016 at 9:09 PM, Zac Hansen <[email protected]> wrote:
> I'm in a FunctionTemplate callback and about to call a function that expects
> parameters of a certain type and I want to make sure that the variable
> backing the object is of the right type.  I know the type the function wants
> (T), but you can't call dynamic_cast<T>(my_void_ptr).
>
> Unless I'm missing something (which is entirely possible), it seems like it
> would be nice if v8::External were templated to take a pointer type.   So I
> could say v8::External<T>::New(my_t_ptr) and then have
> my_local_external->Value() return a T* instead of a void *.   I'm not a
> template master, but I think you could make void * the default to not have
> any behavior change in the default case.
>
> I think a workaround for this is to make a templated wrapping class that
> inherits from a non-templated base class.. so I can say
> dynamic_cast<WrapperClass<T>>((WrapperBaseClass*)void_from_external) ==
> nullptr  and find out that way, but it doesn't seem like that workaround
> should be necessary.
>
> Anyone have a better way to do this (like something already in V8 I don't
> know about) or any thoughts on if v8::External could be made templated?
> I'd be willing to write the patch, as it seems pretty trivial.
>
>
> Thank you!
>
> --Zac
>
> --
> --
> 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 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.

Reply via email to