C++, inject additional data in a method

Posted by justik on Stack Overflow See other posts from Stack Overflow or by justik
Published on 2012-10-05T09:27:57Z Indexed on 2012/10/05 9:37 UTC
Read the original article Hit count: 154

Filed under:
|
|
|

I am adding the new modul in some large library. All methods here are implemented as static. Let mi briefly describe the simplified model:

typedef std::vector<double> TData;
double test ( const TData &arg ) { return arg ( 0 ) * sin ( arg ( 1 ) + ...;}
double ( * p_test ) ( const TData> &arg) = &test;

class A
{
    public:
      static T f1 (TData &input) {
         .... //some computations
         B::f2 (p_test);
      }
};

Inside f1() some computations are perfomed and a static method B::f2 is called. The f2 method is implemented by another author and represents some simulation algorithm (example here is siplified).

class B
{
    public:
      static double f2 (double ( * p_test ) ( const TData  &arg ) )
      {
          //difficult algorithm working p_test many times
          double res = p_test(arg);
      }
};

The f2 method has a pointer to some weight function (here p_test). But in my case some additional parameters computed in f1 for test() methods are required

 double test ( const TData &arg, const TData &arg2, char *arg3.... ) { }

How to inject these parameters into test() (and so to f2) to avoid changing the source code of the f2 methods (that is not trivial), redesign of the library and without dirty hacks :-) ?

The most simple step is to override f2

static double f2 (double ( * p_test ) ( const TData  &arg ), const TData &arg2, char *arg3....  )

But what to do later? Consider, that methods are static, so there will be problems with objects. Thanks for your help.

© Stack Overflow or respective owner

Related posts about c++

Related posts about data