7 #include <nx/sdk/uuid.h> 9 #include "i_ref_countable.h" 27 template<
class DerivedInterface,
class BaseInterface = IRefCountable>
31 using IRefCountable::queryInterface;
36 return doQueryInterface(
id);
42 const Uuid& deprecatedInterfaceId)
44 static_assert(Uuid::size() == IRefCountable::InterfaceId::minSize(),
45 "Broken compatibility with old SDK");
46 if (memcmp(
id, deprecatedInterfaceId.data(), Uuid::size()) == 0)
50 return static_cast<DerivedInterface*
>(
this);
52 return doQueryInterface(
id);
56 static_assert(std::is_base_of<IRefCountable, BaseInterface>::value,
57 "Template parameter BaseInterface should be derived from IRefCountable");
61 friend DerivedInterface;
65 if (*DerivedInterface::interfaceId() == *
id)
69 return static_cast<DerivedInterface*
>(
this);
71 return BaseInterface::queryInterface(
id);
IRefCountable * queryInterfaceSupportingDeprecatedId(const IRefCountable::InterfaceId *id, const Uuid &deprecatedInterfaceId)
Definition: interface.h:40
Definition: i_ref_countable.h:62
Definition: interface.h:28
Definition: apple_utils.h:6
Definition: i_ref_countable.h:50