L
Lars Uffmann
I am trying to add some objects to a collection, handled by a custom
wrapper class called configuration.
I want the wrapper class to behave user friendly, in a way that
configuration.add (key, object);
will add the object if key does not yet exist, or update the object with
new settings if the key already exists in the collection.
I had this working previously, with gcc 3.4.4. and code like this:
--- snip ---
void (configuration::*add_or_set)(string, configParameter, bool =
PARAM_KEEP_CATEGORY);
if (parameters.find(param) == parameters.end()) add_or_set =
&configuration::add;
else add_or_set = &configuration::set;
--- snip ---
Here, "param" reflects the key and "configParameter" is the object. I
would then call add_or_set (param, object) later in the function, to
either insert a new object, or replace the old one's data.
This compiled and linked without warnings, and executed just fine.
However, I just tried this on gcc 4.5.0, and I am getting the error
message at compile time that:
"error: default arguments are only permitted for function parameters"
Does this mean I was using a non standard but supported functionality
which has now been removed? Is there any other way of declaring my
function pointer so that I can call it with only the parameters that
change on every call?
Both underlying functions - add and set - have the exact same parameters
(designed to have identical interfaces), and the default value for the
third (bool) parameter is declared in both function headers.
Best Regards,
Lars
wrapper class called configuration.
I want the wrapper class to behave user friendly, in a way that
configuration.add (key, object);
will add the object if key does not yet exist, or update the object with
new settings if the key already exists in the collection.
I had this working previously, with gcc 3.4.4. and code like this:
--- snip ---
void (configuration::*add_or_set)(string, configParameter, bool =
PARAM_KEEP_CATEGORY);
if (parameters.find(param) == parameters.end()) add_or_set =
&configuration::add;
else add_or_set = &configuration::set;
--- snip ---
Here, "param" reflects the key and "configParameter" is the object. I
would then call add_or_set (param, object) later in the function, to
either insert a new object, or replace the old one's data.
This compiled and linked without warnings, and executed just fine.
However, I just tried this on gcc 4.5.0, and I am getting the error
message at compile time that:
"error: default arguments are only permitted for function parameters"
Does this mean I was using a non standard but supported functionality
which has now been removed? Is there any other way of declaring my
function pointer so that I can call it with only the parameters that
change on every call?
Both underlying functions - add and set - have the exact same parameters
(designed to have identical interfaces), and the default value for the
third (bool) parameter is declared in both function headers.
Best Regards,
Lars