Это немного сложно описать, так что потерпите. У меня есть две отдельные библиотеки, которые я пытаюсь объединить. Одна библиотека представляет собой числовой оптимизатор (сейчас реализован оптимизатор Nelder Mead), а другая — библиотека калибровки датчиков. Библиотеке оптимизатора необходимо, чтобы пользователь указал и передал указатель на функцию обратного вызова для «оптимизации». Библиотека датчиков имеет общий класс датчиков для хранения данных калибровки для различных датчиков (по одному классу для каждого датчика), и ей необходимо вызвать этот оптимизатор и передать обратный вызов. Однако, поскольку функция обратного вызова является нестатическим членом класса датчиков, она выдает такие ошибки, как «ошибка: недопустимое использование нестатической функции-члена».
Ниже приведен действительно глупый пример. Ниже приведен набор файлов, который послужит основным примером того, что я пытаюсь сделать:
optimize.h
Код: Выделить всё
#pragma once
double Optimizer( double (*func)(const double&),
const double& arg)
{
return func(arg);
}
testLib.h
Код: Выделить всё
#pragma once
class Calibrator
{
public:
double testFun(const double& arg);
double doThing();
double x = 9.8;
};
testLib.cpp
Код: Выделить всё
#include "testLib.h"
#include "optimize.h"
double Calibrator::testFun(const double& arg)
{
x *= arg;
return x;
}
double Calibrator::doThing()
{
return Optimizer(testFun,
10);
}
Как я могу исправить эту ситуацию, желательно без полной реструктуризации кода, делая что-то дурацкое, например, делая оптимизатор частью класса калибровки датчика?
Подробнее здесь:
https://stackoverflow.com/questions/793 ... r-callback