On Thu, 2013-08-08 at 16:40 +0200, Kjell Ahlstedt wrote:
Templated get_*() methods can be added as overloaded methods, because
the number of parameters will be different. Example:
_WRAP_METHOD(Glib::VariantBase get_action_state(const
Glib::ustring& action_name) const,
g_action_group_get_action_state)
template <typename T_Value>
void get_action_state(const Glib::ustring& action_name,
T_Value& value) const;
It's also possible to deprecate the old get_action_state() and add a
new get_action_state_variant(), identical except for its name.
Yes, thanks for the suggestion. I've done that.
I'm not sure whether it's possible to overload other methods, e.g.
_WRAP_METHOD(void change_action_state(const Glib::ustring&
action_name, const Glib::VariantBase& value),
g_action_group_change_action_state)
template <typename T_Value>
void change_action_state(const Glib::ustring& action_name,
const T_Value& value);
Overload resolution prefers a non-template method to a template
method, but perhaps that's true only when the parameter types exactly
match those of the non-template method. The last parameter in a
typical call would not be a Glib::VariantBase& but a
Glib::Variant<T>&.
I tried. But you are right, the compiler calls the templated change_state<>() with the Variant<>, trying to call change_state_variant() with a Variant<Variant<int>>, for instance. At least that would be an API change instead of an ABI change, because existing already-compiled applications would be unaffected, but it would be a hard one to detect. So, in Action, I added template<typename T_Value> void change_state(const Glib::Variant<T_Value>& value) to give the compiler something to call. https://git.gnome.org/browse/glibmm/commit/?id=8acf6182ee6e54040cec1a049704c7563f67475a Hopefully there's no case where someone would really want to call change_state() with a Variant. It seems to work. Does it seem OK to you? If so, I'll do it for similar API. -- Murray Cumming murrayc murrayc com www.murrayc.com www.openismus.com
Attachment:
glibmm_action_template_change_state.patch
Description: Text Data