Статическая функция должна иметь дело с членами класса C ++

Мне нужно навести мост между двумя частями программного обеспечения, но я столкнулся с проблемой, с которой не знаю, как решить. Надеюсь, у кого-то появятся интересные и (желательно) рабочие предложения.

Вот предыстория: у меня есть программный пакет C ++. Мне нужно заменить некоторую функцию в данном классе другой функцией, и это нормально. Проблема в том, что новая функция вызывает другую функцию, которая должна быть статической, но должна иметь дело с членами класса. Это вторая функция, которая меня бесит.

Если функция не является статической, я получаю следующую ошибку:

error: argument of type ‘void (MyClass::)(…)’ does not match ‘void (*)(…)’

Если я устанавливаю ее на статическую, я получаю либо следующую ошибку:

error: cannot call member function ‘void
MyClass::MyFunction(const double *)’ without object

или

error: ‘this’ is unavailable for static member functions

в зависимости от того, использую ли я ключевое слово «this» или нет. («Функция ()» или «это-> Функция ()»).

И, наконец, объекту класса требуются некоторые аргументы, которые я не могу передать статической функции (я не могу изменить прототип статической функции), что не позволяет мне создать новый экземпляр внутри самой статической функции.

Как бы вы справились с таким случаем с минимальным переписыванием?

Редактировать: Хорошо, вот упрощенный пример того, что я должен сделать, надеюсь, что он ясен и верен:

// This function is called by another class on an instance of MyClass
MyClass::BigFunction()
{

    …
// Call of a function from an external piece of code, 
// which prototype I cannot change
    XFunction(fcn, some more args);
    …

}


// This function has to be static and I cannot change its prototype,
// for it to be passed to XFunction.  XFunction makes iterations on it
// changing parameters (likelihood maximization) which do not appear 
// on this sample
void MyClass::fcn(some args, typeN& result) 
{

// doesn't work because fcn is static
    result = SomeComputation();

// doesn't work, for the same reason
    result = this->SomeComputation(); 

// doesn't work either, because MyClass has many parameters
// which have to be set
    MyClass *tmp = new MyClass();
    result = tmp->SomeComputation();

}
6
задан Skippy le Grand Gourou 24 February 2012 в 11:50
поделиться