By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,134 Members | 1,742 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,134 IT Pros & Developers. It's quick & easy.

"Local function"?

P: n/a
Hi all,

Suppose I have a routine to find the maximum
of any *univariate* function f in the interval [a, b]:

double f(double x);
double findmax(double (*func)(double), double a, double b);

Now I have a function with three variables:

double g(double x, double y, double z);

And I want to find the maximum of g, with y=y0 and z=z0 fixed, and
x in the interval [a, b].

How can I achieve this? Since C++ does not allow local functions,
the only thing I can think of right now is to modify the findmax
function:

double findmax(double (*func)(double, double, double),
double y, double z, double a, double b);

However, this means if someday I have another function h with four variables,
I'll have to modify findmax again. How can I have a universal findmax?

Thanks for your help.

jack
Jul 19 '05 #1
Share this Question
Share on Google+
1 Reply


P: n/a
"jack" <id***@yahoo.com> wrote...
Suppose I have a routine to find the maximum
of any *univariate* function f in the interval [a, b]:

double f(double x);
double findmax(double (*func)(double), double a, double b);

Now I have a function with three variables:

double g(double x, double y, double z);

And I want to find the maximum of g, with y=y0 and z=z0 fixed, and
x in the interval [a, b].

How can I achieve this? Since C++ does not allow local functions,
It doesn't allow stand-alone local functions, but you can have
a local type with an inline member function, which will act just
like a local function.
the only thing I can think of right now is to modify the findmax
function:

double findmax(double (*func)(double, double, double),
double y, double z, double a, double b);

However, this means if someday I have another function h with four variables, I'll have to modify findmax again. How can I have a universal findmax?


You need to define your 'findmax' not in terms of a function pointer
but in terms of a functor. Try this

template<class T, class F>
T findmax(F func, T a, T b)
{
.. // do what you do, but replace 'double' with T if needed
}

That will allow you to use 'bind2nd' and 'bind1st' function adapters
with which you could "fix" some arguments and let others do the job.

Read more on templates and functors and adapters in your favourite
C++ book.

Victor
Jul 19 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.