diff options
author | Chad Austin <chad@imvu.com> | 2013-03-11 13:02:30 -0700 |
---|---|---|
committer | Jukka Jylänki <jujjyl@gmail.com> | 2013-04-12 14:25:43 +0300 |
commit | 808e914ce1a0a0388d0bb6f6c4dadf935ad35f4e (patch) | |
tree | 20132e4a75c1ebd46111dc9f47894c43bcffc730 | |
parent | 40976b0286d7b647777adc037976925c4c1505fd (diff) |
Just toodling around with smart pointer binding syntax
-rwxr-xr-x | system/include/emscripten/bind.h | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/system/include/emscripten/bind.h b/system/include/emscripten/bind.h index bdcde625..fd2e928a 100755 --- a/system/include/emscripten/bind.h +++ b/system/include/emscripten/bind.h @@ -660,6 +660,23 @@ namespace emscripten { } }; + template<typename PointerType> + struct ptr { + typedef PointerType pointer_type; + }; + + namespace internal { + template<typename T> + struct is_ptr { + enum { value = false }; + }; + + template<typename T> + struct is_ptr<ptr<T>> { + enum { value = true }; + }; + }; + template<typename ClassType, typename BaseSpecifier = internal::NoBaseClass> class class_ { public: @@ -670,16 +687,19 @@ namespace emscripten { BaseSpecifier::template verify<ClassType>(); - _embind_register_class( - TypeID<ClassType>::get(), - TypeID<AllowedRawPointer<ClassType>>::get(), - TypeID<AllowedRawPointer<const ClassType>>::get(), - BaseSpecifier::get(), - BaseSpecifier::template getUpcaster<ClassType>(), - BaseSpecifier::template getDowncaster<ClassType>(), - std::is_polymorphic<ClassType>::value, - name, - reinterpret_cast<GenericFunction>(&raw_destructor<ClassType>)); + if (is_ptr<ClassType>::value) { + } else { + _embind_register_class( + TypeID<ClassType>::get(), + TypeID<AllowedRawPointer<ClassType>>::get(), + TypeID<AllowedRawPointer<const ClassType>>::get(), + BaseSpecifier::get(), + BaseSpecifier::template getUpcaster<ClassType>(), + BaseSpecifier::template getDowncaster<ClassType>(), + std::is_polymorphic<ClassType>::value, + name, + reinterpret_cast<GenericFunction>(&raw_destructor<ClassType>)); + } } template<typename... ConstructorArgs, typename... Policies> |