summaryrefslogtreecommitdiff
path: root/include/cppuhelper
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2015-01-07 17:42:07 +0100
committerStephan Bergmann <sbergman@redhat.com>2015-01-07 17:42:23 +0100
commit8ad48d881b5d36af4d2e744cf8031b5f4b2f43e1 (patch)
treeb71a231a0d14bf671934a94e2675f43ee6848f35 /include/cppuhelper
parent7a091b24ef3abc2f27bfaebdd47714d936f4e9c9 (diff)
Variadic cppu::ImplInheritanceHelper
Change-Id: I7d958fdf328e44a0d299b29a3a165425731ccf7c
Diffstat (limited to 'include/cppuhelper')
-rw-r--r--include/cppuhelper/implbase.hxx43
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