Я должен сделать какой-то мост между двумя частями программного обеспечения, но столкнулся с проблемой, с которой я не знаю, как справиться.Надеюсь, у кого-то будут интересные и (желательно) рабочие предложения.
Вот предыстория: у меня есть программный пакет 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" ("Function ()" или "this-> Function ()").
И, наконец, объект класса требует некоторых аргументов, которые я не могу передать статической функции (я не могу изменить прототип статической функции), что не позволяет мне создавать новый экземпляр внутри самой статической функции.
Как бы вы справились с таким делом с минимальным переписыванием?
Редактировать: Хорошо, вот упрощенный пример того, что я должен сделать, надеясь, что это ясно и правильно:
// 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();
}