19 #ifndef GZ_PLUGIN_SPECIALIZEDPLUGIN_HH_
20 #define GZ_PLUGIN_SPECIALIZEDPLUGIN_HH_
31 template <
class,
class>
class ComposePlugin;
32 template <
class>
class SelectSpecializers;
36 template <
class... OtherSpecInterfaces>
64 template <
class SpecInterface>
75 public:
template <
class Interface>
76 Interface *QueryInterface();
79 public:
template <
class Interface>
80 const Interface *QueryInterface()
const;
83 public:
template <
class Interface>
87 public:
template <
class Interface>
91 public:
template <
class Interface>
92 bool HasInterface()
const;
99 template <
class,
class>
friend class detail::ComposePlugin;
100 template <
class>
friend class detail::SelectSpecializers;
107 private:
template <
class T>
struct type { };
113 private:
template <
class Interface>
114 Interface *PrivateQueryInterface(type<Interface>);
120 private: SpecInterface *PrivateQueryInterface(type<SpecInterface>);
126 private:
template <
class Interface>
127 const Interface *PrivateQueryInterface(type<Interface>)
const;
133 private:
const SpecInterface *PrivateQueryInterface(
134 type<SpecInterface>)
const;
140 private:
template <
class Interface>
141 bool PrivateHasInterface(type<Interface>)
const;
147 private:
bool PrivateHasInterface(type<SpecInterface>)
const;
155 const Plugin::InterfaceMap::iterator privateSpecializedInterfaceIterator;
163 #include "gz/plugin/detail/SpecializedPlugin.hh"