Использование нестатической функции-члена класса для обратного вызоваC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Использование нестатической функции-члена класса для обратного вызова

Сообщение Anonymous »

Это немного сложно описать, так что потерпите. У меня есть две отдельные библиотеки, которые я пытаюсь объединить. Одна библиотека представляет собой числовой оптимизатор (сейчас реализован оптимизатор 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»