7 #include <nx/sdk/uuid.h> 9 #include "i_ref_countable.h" 47 template<
class DerivedInterface,
class BaseInterface = IRefCountable>
51 using IRefCountable::queryInterface;
56 return doQueryInterface(
id);
62 const Uuid& deprecatedInterfaceId)
64 static_assert(Uuid::size() == IRefCountable::InterfaceId::minSize(),
65 "Broken compatibility with old SDK");
66 if (memcmp(
id, deprecatedInterfaceId.data(), Uuid::size()) == 0)
70 return static_cast<DerivedInterface*
>(
this);
72 return doQueryInterface(
id);
76 static_assert(std::is_base_of<IRefCountable, BaseInterface>::value,
77 "Template parameter BaseInterface should be derived from IRefCountable");
86 (void) &DerivedInterface::interfaceId;
89 friend DerivedInterface;
91 IRefCountable* doQueryInterface(
const IRefCountable::InterfaceId*
id)
93 if (*DerivedInterface::interfaceId() == *
id)
97 return static_cast<DerivedInterface*
>(
this);
99 return BaseInterface::queryInterface(
id);
IRefCountable * queryInterfaceSupportingDeprecatedId(const IRefCountable::InterfaceId *id, const Uuid &deprecatedInterfaceId)
Definition: interface.h:60
Definition: i_ref_countable.h:60
Definition: interface.h:48
Definition: device_agent.h:13
Definition: i_ref_countable.h:48