Смешивать и сочетать класс в C ++ / MFC (часть 2) - PullRequest
1 голос
/ 04 января 2011

Я говорил вчера о ре-факторинге, и подход, к которому я шел, был явно неверным.Я изучил предложенные шаблоны, но проблема все еще заключалась в том, что общая функциональность действительно принадлежит к классу ужина, который я не мог извлечь из того, что MFC предъявляет свои собственные требования к различным окнам (CWnd / CDialogEx).*

Сегодня у меня появилась идея, то есть я мог бы использовать шаблон суперкласса для упаковки общей логики, которая теоретически решит проблему ...

То есть я определяю шаблонный класс CCommon иунаследуйте его с необходимым суперклассом во всех классах окна.Например, class CMyWnd : private CCommon<CWnd>

К сожалению, MFC делает все ужасно из-за макросов ...

#pragma once

template <class T> class CCommon : public T
{
    //DECLARE_DYNAMIC(CCommon)

public:
    CCommon();
    virtual ~CCommon();

//protected:
    //DECLARE_MESSAGE_MAP()
};


//IMPLEMENT_DYNAMIC(template <class T> CCommon<T>, CWnd)

template <class T> CCommon<T>::CCommon()
{

}

template <class T> CCommon<T>::~CCommon()
{
}


//BEGIN_MESSAGE_MAP(template <class T> CCommon<T>, CWnd)
//END_MESSAGE_MAP()

Есть ли способ обойти эту проблему?

Вещивроде IMPLEMENT_DYNAMIC(template <class T> CCommonWndLogic<T>, T) или template <class T> IMPLEMENT_DYNAMIC(CCommonWndLogic<T>, T) не компилируется вообще.То же самое с картами сообщений, которые я действительно хотел бы перенести в базовый класс.

1 Ответ

3 голосов
/ 04 января 2011

К сожалению, у вас возникают проблемы с этим подходом. MFC изобилует хаки и устаревшие обходные пути. Ваш подход не очень практичен, если вы не можете работать с MFC на уровне источника. Вы действительно не можете. Используйте MFC строго как API, который будет вызываться по мере необходимости. Выполните все свои самые современные разработки программного обеспечения C ++ в своей собственной независимой иерархии классов и просто вызывайте MFC, как требуется для реализации деталей вашего пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...