|
|
@@ -200,29 +200,29 @@ template <class... ComClasses> |
|
|
|
class ComBaseClassHelper : public ComBaseClassHelperBase<ComClasses...>
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
ComBaseClassHelper (unsigned int initialRefCount = 1) : ComBaseClassHelperBase<ComClasses...> (initialRefCount) {}
|
|
|
|
explicit ComBaseClassHelper (unsigned int initialRefCount = 1)
|
|
|
|
: ComBaseClassHelperBase<ComClasses...> (initialRefCount) {}
|
|
|
|
|
|
|
|
JUCE_COMRESULT QueryInterface (REFIID refId, void** result)
|
|
|
|
{
|
|
|
|
return queryInterfaceWithType (refId, result, Tag<ComClasses>{}...);
|
|
|
|
}
|
|
|
|
const std::tuple<REFIID, void*> bases[]
|
|
|
|
{
|
|
|
|
std::make_tuple (__uuidof (ComClasses),
|
|
|
|
static_cast<void*> (static_cast<ComClasses*> (this)))...
|
|
|
|
};
|
|
|
|
|
|
|
|
for (const auto& base : bases)
|
|
|
|
{
|
|
|
|
if (refId == std::get<0> (base))
|
|
|
|
{
|
|
|
|
this->AddRef();
|
|
|
|
*result = std::get<1> (base);
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
JUCE_COMRESULT queryInterfaceWithType (REFIID refId, void** result)
|
|
|
|
{
|
|
|
|
return ComBaseClassHelperBase<ComClasses...>::QueryInterface (refId, result);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename S> struct Tag {};
|
|
|
|
|
|
|
|
template <typename T, typename... Ts>
|
|
|
|
JUCE_COMRESULT queryInterfaceWithType (REFIID refId, void** result, Tag<T>, Tag<Ts>...)
|
|
|
|
{
|
|
|
|
if (refId == __uuidof (T))
|
|
|
|
return this->template castToType<T> (result);
|
|
|
|
|
|
|
|
return queryInterfaceWithType (refId, result, Tag<Ts>{}...);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
|
|
|
|