昨天我在谈论重构,而我所追求的方法显然是错误的。我研究了建议的模式,但问题仍然是,通用功能实际上只是晚饭类的东西,因为MFC提出了自己对不同窗口(CWnd / CDialogEx)的要求,所以我无法从中得到这种东西。

今天我有了一个主意,就是说,我可以使用一个父类(super class)模板来包装可以解决问题的通用逻辑,理论上来说...

也就是说,我定义了模板化的CCommon类,并在所有窗口类中使用所需的父类(super class)继承了它。像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)之类的东西似乎根本无法编译。与消息映射相同,我非常想将其传递给基类。

最佳答案

不幸的是,您正在用这种方法来麻烦。 MFC充满了hack和遗留的变通办法。除非可以在源代码级别使用MFC,否则您的方法并不实际。你真的不行严格将MFC用作需要调用的API。在您自己的独立类层次结构中完成所有最新的C++软件工程,然后根据需要调用MFC来实现UI的详细信息。

关于c++ - C++/MFC中的混合匹配类(第2部分),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4592037/

10-13 08:27