Я получил несколько предупреждений, используя чисто виртуальные интерфейсы на некоторых объектах, производных от MFC CWnd
, посредством множественного наследования. Я считаю, что это вызвано определением методов, которые должны быть реализованы для карты сообщений.
warning C4407: cast between different pointer to member representations, compiler may generate incorrect code
Это звучит немного больше, чем предупреждение, больше похоже на то, что может привести к повреждению кучи. Так есть ли другой способ сделать что-то похожее на приведенное ниже, что не приведет к тому, что динамические макросы MFC будут задыхаться больше, чем обычно?
class ISomeInterface
{
public:
virtual LRESULT OnSomeRegisteredMessage(WPARAM wp, LPARAM lp) = 0;
};
class CSomeCoolWnd : public CWnd, public ISomeInterface
{
public:
LRESULT OnSomeRegisteredMessage(WPARAM wp, LPARAM lp);
};
BEGIN_MESSAGE_MAP(CSomeCoolWnd , CWnd)
ON_REGISTERED_MESSAGE(WM_USER_DEFINED, &CSomeCoolWnd::OnSomeRegisteredMessage)
END_MESSAGE_MAP()
Единственное, что я придумал, это закомментировал обработчики сообщений из интерфейсов и оставил комментарии, говорящие потребителю, что они должны его реализовать. Однако было бы неплохо применить это через ошибку компилятора, а не позволять им использовать интерфейс и получать неожиданные результаты во время выполнения из-за отсутствия вещей.