From b06873bf98cd65becfd0ba8d9d842c3e4a9b9f1b Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Fri, 5 Oct 2012 17:12:13 -0400 Subject: [PATCH] get rid of macro/concat hack --- termite.cc | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/termite.cc b/termite.cc index e9efe4d..34ae6a9 100644 --- a/termite.cc +++ b/termite.cc @@ -778,21 +778,26 @@ char *check_match(VteTerminal *vte, int event_x, int event_y) { } /* {{{ CONFIG LOADING */ -#define MAKE_GET_CONFIG_FUNCTION(NAME, TYPE) \ -static bool get_config_ ## NAME (GKeyFile *config, const char *group, const char *key, TYPE *value) { \ - GError *error = NULL; \ - *value = g_key_file_get_ ## NAME (config, group, key, &error); \ - if (error) { \ - g_error_free(error); \ - return false; \ - } \ - return true; \ +template +static bool get_config(T (*get)(GKeyFile *, const char *, const char *, GError **), + GKeyFile *config, const char *group, const char *key, T *value) { + GError *error = nullptr; + *value = get(config, group, key, &error); + if (error) { + g_error_free(error); + return false; + } + return true; } -MAKE_GET_CONFIG_FUNCTION(boolean, gboolean) -MAKE_GET_CONFIG_FUNCTION(integer, int) -MAKE_GET_CONFIG_FUNCTION(string, char *) -MAKE_GET_CONFIG_FUNCTION(double, double) +auto get_config_boolean(std::bind(get_config, g_key_file_get_boolean, + _1, _2, _3, _4)); +auto get_config_integer(std::bind(get_config, g_key_file_get_integer, + _1, _2, _3, _4)); +auto get_config_string(std::bind(get_config, g_key_file_get_string, + _1, _2, _3, _4)); +auto get_config_double(std::bind(get_config, g_key_file_get_double, + _1, _2, _3, _4)); static bool get_config_color(GKeyFile *config, const char *key, GdkColor *color) { char *cfgstr;