Re: using and de-referencing a function pointer in a member function
Lars Uffmann wrote:
Hi everyone,
I'm trying to execute the same function call with 1 parameter different
in a switch statement of a member function. However, if a certain
condition is true (and I can check that before the switch statement), I
want to execute a difference function call with the same parameters.
So instead of using an if-clause to distinguish the 2 cases in each
case-statement, or doubling the switch, I considered this:
void configuration::add (string param, configParameter cp);
void configuration::set (string param, configParameter cp);
my member function:
void configuration::add (string param, string strType, string strValue);
{
void (configuration::*add_or_set)(string, configParameter);
if (/* my condition */) add_or_set = &configuration::add;
else add_or_set = &configuration::set;
/* then the switch statement */
switch (expression) {
case a: (this->*add_or_set) (someString, someConfigParameter);
break;
case b: (this->*add_or_set) (someOtherString, someConfigParameter);
break;
default:
break;
}
}
After I played around with the de-referencing for a bit, getting various
error messages, I finally got it right (seemingly) with this expression
(this->*add_or_set) (parameters ...)
So my question: Is this the way to go? Or should I use a different
syntax? Thank you in advance!
Yes, it's the only syntax available to you directly. You can, of
course, declare a 'configuration&' and init it by *this, but you will
still have to use the parens:
configuration& self = *this;
...
case a: (self.*add_or_set)(someString, someConfigParameter);
Now, let me be the first to note that you should probably pass those
strings by reference to const...
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask