QSlotObjectBase: make Operation enum protected
authorMarc Mutz <marc.mutz@kdab.com>
Fri, 17 Aug 2012 14:13:19 +0000 (16:13 +0200)
committerQt by Nokia <qt-info@nokia.com>
Sun, 26 Aug 2012 12:34:06 +0000 (14:34 +0200)
We don't want people to go and call through the function pointer
directly.

Change-Id: I386645239974f008d513eaa62593c1141b294b60
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
src/corelib/kernel/qobject_impl.h

index 3586b1c..9eda421 100644 (file)
@@ -106,6 +106,9 @@ namespace QtPrivate {
         // don't use virtual functions here; we don't want the
         // compiler to create tons of per-polymorphic-class stuff that
         // we'll never need. We just use one function pointer.
+        typedef void (*ImplFn)(int which, QSlotObjectBase* this_, QObject *receiver, void **args, bool *ret);
+        const ImplFn impl;
+    protected:
         enum Operation {
             Destroy,
             Call,
@@ -113,10 +116,9 @@ namespace QtPrivate {
 
             NumOperations
         };
-        typedef void (*ImplFn)(int which, QSlotObjectBase* this_, QObject *receiver, void **args, bool *ret);
-        const ImplFn impl;
-
+    public:
         explicit QSlotObjectBase(ImplFn fn) : ref(1), impl(fn) {}
+
         inline void destroy()                   { impl(Destroy, this, 0, 0, 0); }
         inline bool compare(void **a) { bool ret; impl(Compare, this, 0, a, &ret); return ret; }
         inline void call(QObject *r, void **a)  { impl(Call,    this, r, a, 0); }