Mercurial > octave
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>