changeset 23437:442fe5b5afb5

new action_container constructors for unwind_protect * action-container.h (method_elem::method_elem (T&, void (T::*) ())): New constructor. (method_arg_elem::method_arg_elem (T&, void (T::*) (A), A)): Likewise. (method_crefarg_elem (T&, void (T::*) (const A&), const A&)): Likewise. (void add_method (T&, void (T::*) ())): New template. (void add_method (T&, void (T::*) (A), A)): Likewise. (void add_method (T&, void (T::*) (const A&), const A&)): Likewise.
author John W. Eaton <jwe@octave.org>
date Tue, 25 Apr 2017 14:20:34 -0400
parents c715a1aebbd5
children d24d01273bd0
files liboctave/util/action-container.h
diffstat 1 files changed, 27 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/util/action-container.h	Tue Apr 25 13:52:20 2017 -0400
+++ b/liboctave/util/action-container.h	Tue Apr 25 14:20:34 2017 -0400
@@ -131,6 +131,9 @@
     method_elem (T *obj, void (T::*method) (void))
       : e_obj (obj), e_method (method) { }
 
+    method_elem (T& obj, void (T::*method) (void))
+      : e_obj (&obj), e_method (method) { }
+
     // No copying!
 
     method_elem (const method_elem&) = delete;
@@ -156,6 +159,9 @@
     method_arg_elem (T *obj, void (T::*method) (A), A arg)
       : e_obj (obj), e_method (method), e_arg (arg) { }
 
+    method_arg_elem (T& obj, void (T::*method) (A), A arg)
+      : e_obj (&obj), e_method (method), e_arg (arg) { }
+
     // No copying!
 
     method_arg_elem (const method_arg_elem&) = delete;
@@ -183,6 +189,9 @@
     method_crefarg_elem (T *obj, void (T::*method) (const A&), const A& arg)
       : e_obj (obj), e_method (method), e_arg (arg) { }
 
+    method_crefarg_elem (T& obj, void (T::*method) (const A&), const A& arg)
+      : e_obj (&obj), e_method (method), e_arg (arg) { }
+
     // No copying!
 
     method_crefarg_elem (const method_crefarg_elem&) = delete;
@@ -285,6 +294,12 @@
     add (new method_elem<T> (obj, method));
   }
 
+  template <typename T>
+  void add_method (T& obj, void (T::*method) (void))
+  {
+    add (new method_elem<T> (obj, method));
+  }
+
   // Call to T::method (A).
   template <typename T, typename A>
   void add_method (T *obj, void (T::*method) (A), A arg)
@@ -292,6 +307,12 @@
     add (new method_arg_elem<T, A> (obj, method, arg));
   }
 
+  template <typename T, typename A>
+  void add_method (T& obj, void (T::*method) (A), A arg)
+  {
+    add (new method_arg_elem<T, A> (obj, method, arg));
+  }
+
   // Call to T::method (const A&).
   template <typename T, typename A>
   void add_method (T *obj, void (T::*method) (const A&), const A& arg)
@@ -299,6 +320,12 @@
     add (new method_crefarg_elem<T, A> (obj, method, arg));
   }
 
+  template <typename T, typename A>
+  void add_method (T& obj, void (T::*method) (const A&), const A& arg)
+  {
+    add (new method_crefarg_elem<T, A> (obj, method, arg));
+  }
+
   // Call to delete (T*).
 
   template <typename T>