Я говорил вчера о ре-факторинге, и подход, к которому я шел, был явно неверным.Я изучил предложенные шаблоны, но проблема все еще заключалась в том, что общая функциональность действительно принадлежит к классу ужина, который я не мог извлечь из того, что 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)
не компилируется вообще.То же самое с картами сообщений, которые я действительно хотел бы перенести в базовый класс.