7 #include <nx/sdk/uuid.h> 9 #include "i_ref_countable.h" 48 template<
class DerivedInterface,
class BaseInterface = IRefCountable>
52 using IRefCountable::queryInterface;
57 return doQueryInterface(
id);
63 const Uuid& deprecatedInterfaceId)
65 static_assert(Uuid::size() == IRefCountable::InterfaceId::minSize(),
66 "Broken compatibility with old SDK");
67 if (memcmp(
id, deprecatedInterfaceId.data(), Uuid::size()) == 0)
71 return static_cast<DerivedInterface*
>(
this);
73 return doQueryInterface(
id);
77 static_assert(std::is_base_of<IRefCountable, BaseInterface>::value,
78 "Template parameter BaseInterface should be derived from IRefCountable");
87 (void) &DerivedInterface::interfaceId;
90 friend DerivedInterface;
92 IRefCountable* doQueryInterface(
const IRefCountable::InterfaceId*
id)
94 if (*DerivedInterface::interfaceId() == *
id)
98 return static_cast<DerivedInterface*
>(
this);
100 return BaseInterface::queryInterface(
id);
IRefCountable * queryInterfaceSupportingDeprecatedId(const IRefCountable::InterfaceId *id, const Uuid &deprecatedInterfaceId)
Definition: interface.h:61
Definition: i_ref_countable.h:61
Definition: interface.h:49
Definition: apple_utils.h:6
Definition: i_ref_countable.h:49