在C ++ / MFC中混合和匹配类(第2部分)

时间:2011-01-04 09:13:37

标签: c++ templates mfc

我昨天正在谈论重新分解,而我所采取的方法显然是错误的。我查看了建议的模式,但问题仍然是常见的功能实际上是一个超级类的东西,我无法从中得出,因为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 个答案:

答案 0 :(得分:3)

遗憾的是,您正在为这种方法遇到麻烦。 MFC充斥着黑客和传统的解决方法。除非您可以在源代码级别使用MFC,否则您的方法并不实用。你真的不能。严格按照MFC的要求调用API。在您自己的独立课堂层级中完成您所有最先进的C ++软件工程,并根据需要调用MFC来实现UI的详细信息。