"Local function"?

J

jack

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
 
V

Victor Bazarov

jack said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,774
Messages
2,569,599
Members
45,171
Latest member
VinayKumar Nevatia__
Top