我昨天正在谈论重新分解,而我所采取的方法显然是错误的。我查看了建议的模式,但问题仍然是常见的功能实际上是一个超级类的东西,我无法从中得出,因为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)
等似乎根本无法编译。与消息映射相同,我真的想将其转移到基类。
答案 0 :(得分:3)
遗憾的是,您正在为这种方法遇到麻烦。 MFC充斥着黑客和传统的解决方法。除非您可以在源代码级别使用MFC,否则您的方法并不实用。你真的不能。严格按照MFC的要求调用API。在您自己的独立课堂层级中完成您所有最先进的C ++软件工程,并根据需要调用MFC来实现UI的详细信息。