Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <typename TClassImpl, int32 TClassImpl::*mem>
- JSBool JS_DLL_CALLBACK WriteProp(JSContext* cx, JSObject* obj, jsval id, jsval* vp)
- {
- if (TClassImpl* pImpl = (TClassImpl*)::JS_GetInstancePrivate(cx, obj, &TClassImpl::s_JsClass, NULL))
- return ::JS_ValueToInt32(cx, *vp, &(pImpl->*mem));
- return JS_FALSE;
- }
- ::JSPropertySpec Vec2::s_JsProps[] = {
- {"x", 1, JSPROP_PERMANENT, &JsWrap::ReadProp<Vec2, &Vec2::x>, &JsWrap::WriteProp<Vec2, &Vec2::x>},
- {"y", 2, JSPROP_PERMANENT, &JsWrap::ReadProp<Vec2, &Vec2::y>, &JsWrap::WriteProp<Vec2, &Vec2::y>},
- {0}
- };
- template <typename TClassImpl, JSObject* TClassImpl::*mem>
- JSBool JS_DLL_CALLBACK WriteProp(JSContext* cx, JSObject* obj, jsval id, jsval* vp)
- {
- if (TClassImpl* pImpl = (TClassImpl*)::JS_GetInstancePrivate(cx, obj, &TClassImpl::s_JsClass, NULL))
- return ::JS_ValueToObject(cx, *vp, &(pImpl->*mem));
- return JS_FALSE;
- }
- 1>d:projectstestingjswndsrcmain.cpp(93) : error C2440: 'specialization' : cannot convert from 'int32 JsGlobal::Vec2::* ' to 'JSObject *JsGlobal::Vec2::* const '
- 1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
- 1>d:projectstestingjswndsrcmain.cpp(93) : error C2973: 'JsWrap::ReadProp' : invalid template argument 'int32 JsGlobal::Vec2::* '
- 1> d:projectstestingjswndsrcwrap_js.h(64) : see declaration of 'JsWrap::ReadProp'
- 1>d:projectstestingjswndsrcmain.cpp(93) : error C2440: 'initializing' : cannot convert from 'overloaded-function' to 'JSPropertyOp'
- 1> None of the functions with this name in scope match the target type
- class Vec2
- {
- public:
- int32 x, y;
- Vec2(JSContext* cx, JSObject* obj, uintN argc, jsval* argv);
- static ::JSClass s_JsClass;
- static ::JSPropertySpec s_JsProps[];
- };
- typedef JSBool
- (* JS_DLL_CALLBACK JSPropertyOp)(JSContext *cx, JSObject *obj, jsval id,
- jsval *vp);
- ...
- struct JSPropertySpec {
- const char *name;
- int8 tinyid;
- uint8 flags;
- JSPropertyOp getter;
- JSPropertyOp setter;
- };
- struct X
- {
- int i;
- void* p;
- };
- template<int X::*P>
- void foo(X* t)
- {
- t->*P = 0;
- }
- template<void* X::*P>
- void foo(X* t)
- {
- t->*P = 0;
- }
- int main()
- {
- X x;
- foo<&X::i>(&x);
- foo<&X::p>(&x);
- }
Add Comment
Please, Sign In to add comment