Указатель на метод класса
От: eugene0 Россия  
Дата: 07.01.04 15:42
Оценка:
2moderator: в вопросе упоминается MFC, но мне кажется, что по сути своей вопрос больше по принципам ООП, а MFC здесь только для примера.

Есть класс (решает задачу вычисления по определенному алгоритму):
typedef void (*PREPORTBACK)(int);

class CCalc
{
...
public:
  PREPORTBACK m_pfun;

  int Calc(int arg); // главный метод: вычисления по некоторому алгоритму
};

int CCalc::Calc
{
  ...
  // где-то внутри цикла
  if(m_pfun) (*m_pfun)(...);
  ...
}

Dialog-based клиент для этого класса:
class CCalcDlg : public CDialog
{
...
public:
  CCalc m_CalcObj;
  void ReportBack(int nPercents); 
};

...

BOOL CCalcDlg::OnInitDialog()
{
  ...
  m_CalcObj.m_pfun = ReportBack; // здесь компилятор говорит, что нельзя так преобразовать типы указателей  :( 
  ...
}

Ну и где-то еще в CCalcDlg вызываем m_CalcObj.Calc(..), чтобы собственно начать считать. Хотелось, чтобы в процессе вычислений объект время от времени сообщал клиенту, сколько еще осталось считать, в процентах. Для этого он вызывает ф-ию по указателю m_pfun, которую клиент задал ему в самом начале работы. Но никак не удается присвоить m_pfun указатель на один из методов клиента, получается только на статический или на глобальную ф-ию, а это мне не подходит.

Всем, кто дочитал до этого места, спасибо за терпение. Посоветуйте, что здесь можно сделать?
Хочется связать классы именно на уровне исходников, а не dll, com и т.д.

Исправлено форматирование. -- ПК
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.