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 и т.д.
Исправлено форматирование. -- ПК