diff --git a/src/c-wrapper/internal/c-tools.h b/src/c-wrapper/internal/c-tools.h index 4ccea66b6..26694d757 100644 --- a/src/c-wrapper/internal/c-tools.h +++ b/src/c-wrapper/internal/c-tools.h @@ -123,21 +123,27 @@ public: return reinterpret_cast *>(cObject)->cppPtr; } - template - static inline void setCppPtrFromC (void *cObject, const std::shared_ptr &cppObject) { + template< + typename CppType, + typename = typename std::enable_if::value, CppType>::type + > + static inline void setCppPtrFromC (void *cObject, const std::shared_ptr &cppObject) { L_ASSERT(cObject); - static_cast *>(cObject)->cppPtr = cppObject; + static_cast *>(cObject)->cppPtr = cppObject; cppObject->setProperty("LinphonePrivate::Wrapper::cBackPtr", cObject); } - template - static inline void setCppPtrFromC (void *cObject, const T *cppObject) { + template< + typename CppType, + typename = typename std::enable_if::value, CppType>::type + > + static inline void setCppPtrFromC (void *cObject, const CppType *cppObject) { L_ASSERT(cObject); - T *oldPtr = reinterpret_cast(static_cast *>(cObject)->cppPtr); + CppType *oldPtr = reinterpret_cast(static_cast *>(cObject)->cppPtr); if (oldPtr != cppObject) { delete oldPtr; - T **cppPtr = &static_cast *>(cObject)->cppPtr; - *cppPtr = new T(*cppObject); + CppType **cppPtr = &static_cast *>(cObject)->cppPtr; + *cppPtr = new CppType(*cppObject); (*cppPtr)->setProperty("LinphonePrivate::Wrapper::cBackPtr", cObject); } } @@ -429,8 +435,8 @@ LINPHONE_END_NAMESPACE >(C_OBJECT) // Set the cpp-ptr of a wrapped C object. -#define L_SET_CPP_PTR_FROM_C_OBJECT(C_OBJECT, CPP_PTR) \ - LINPHONE_NAMESPACE::Wrapper::setCppPtrFromC(C_OBJECT, CPP_PTR) +#define L_SET_CPP_PTR_FROM_C_OBJECT(C_OBJECT, CPP_OBJECT) \ + LINPHONE_NAMESPACE::Wrapper::setCppPtrFromC(C_OBJECT, CPP_OBJECT) // Get the private data of a shared or simple cpp-ptr. #define L_GET_PRIVATE(CPP_OBJECT) \