vendredi 1 juillet 2016

Implicit pointer conversions to POD pointer

I have a lot of functions with such signatures:

//libraries I can't change
void f1(double *x);
void f2(double *x1, double *x2);
...

And a lot of code that uses them:

//my code
double x; ... f1(&x);
double x1[] = ...; double x2 = ...; f2(x1, &x2);
...

For some reasons I decided to use in My code special class instead of ordinary doubles:

struct DoubleClass {
    double x_;
    ...
    //constructors, overloaded arithmetic operators and casts to double
};

This DoubleClass behaves like double with some additional functionality that I want. In memory DoubleClass is the same as double. It has only 1 member and sizeof(DoubleClass) == sizeof(double). And so I want to redeclare all doubles in my code with something like

#define double DoubleClass

But I can't compile code because there is no conversion from DoubleClass* to double*. I can't change functions f1, f2. So I wanted to ask if I can somehow define an implicit conversion from DoubleClass* to double* or maybe there are some tricks that will allow to do it.

Aucun commentaire:

Enregistrer un commentaire