diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2015-01-07 17:42:07 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2015-01-07 17:42:23 +0100 |
commit | 8ad48d881b5d36af4d2e744cf8031b5f4b2f43e1 (patch) | |
tree | b71a231a0d14bf671934a94e2675f43ee6848f35 /include/cppuhelper | |
parent | 7a091b24ef3abc2f27bfaebdd47714d936f4e9c9 (diff) |
Variadic cppu::ImplInheritanceHelper
Change-Id: I7d958fdf328e44a0d299b29a3a165425731ccf7c
Diffstat (limited to 'include/cppuhelper')
-rw-r--r-- | include/cppuhelper/implbase.hxx | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/include/cppuhelper/implbase.hxx b/include/cppuhelper/implbase.hxx index 813ea3d0cf42..e97196d8532e 100644 --- a/include/cppuhelper/implbase.hxx +++ b/include/cppuhelper/implbase.hxx @@ -24,6 +24,7 @@ #include <cstddef> #include <exception> +#include <utility> #include <com/sun/star/lang/XTypeProvider.hpp> #include <com/sun/star/uno/Any.hxx> @@ -89,6 +90,11 @@ class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakImplHelper: class_data, detail::ImplClassData<WeakImplHelper, Ifc...>> {}; +protected: + WeakImplHelper() {} + + virtual ~WeakImplHelper() {} + public: css::uno::Any SAL_CALL queryInterface(css::uno::Type const & aType) throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE @@ -107,6 +113,43 @@ public: { return css::uno::Sequence<sal_Int8>(); } }; +template<typename BaseClass, typename... Ifc> +class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE ImplInheritanceHelper: + public BaseClass, public Ifc... +{ + struct cd: + rtl::StaticAggregate< + class_data, detail::ImplClassData<ImplInheritanceHelper, Ifc...>> + {}; + +protected: + template<typename... Arg> ImplInheritanceHelper(Arg &&... arg): + BaseClass(std::forward<Arg>(arg)...) + {} + + virtual ~ImplInheritanceHelper() {} + +public: + css::uno::Any SAL_CALL queryInterface(css::uno::Type const & aType) + throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE + { + css::uno::Any ret(ImplHelper_queryNoXInterface(aType, cd::get(), this)); + return ret.hasValue() ? ret : BaseClass::queryInterface(aType); + } + + void SAL_CALL acquire() throw () SAL_OVERRIDE { BaseClass::acquire(); } + + void SAL_CALL release() throw () SAL_OVERRIDE { BaseClass::release(); } + + css::uno::Sequence<css::uno::Type> SAL_CALL getTypes() + throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE + { return ImplInhHelper_getTypes(cd::get(), BaseClass::getTypes()); } + + css::uno::Sequence<sal_Int8> SAL_CALL getImplementationId() + throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE + { return css::uno::Sequence<sal_Int8>(); } +}; + } #endif |