MFC在创建对话框时使用了许多特殊的宏。在我的快速测试中,尝试编译一个模板对话框类时出现了奇怪的错误。这是否会是一个很大的难点?
以下是我尝试的内容:
MyDlg.h
template <class W>
class CMyDlg : public CDialog
{
typedef CDialog super;
DECLARE_DYNAMIC(CMyDlg <W>)
public:
CMyDlg (CWnd* pParent); // standard constructor
virtual ~CMyDlg ();
// Dialog Data
enum { IDD = IDD_MYDLG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
private:
W *m_pWidget; //W will always be a CDialog
};
IMPLEMENT_DYNAMIC(CMyDlg<W>, super) <-------------------
template <class W>
CMyDlg<W>::CMyDlg(CWnd* pParent)
: super(CMyDlg::IDD, pParent)
{
m_pWidget = new W(this);
}
我得到了许多错误信息,但主要的一个似乎是:
错误 C2955:'CMyDlg':使用类模板需要模板参数列表
我尝试使用一些专门的模板宏版本,但效果不大,其他错误会改变,但这个错误仍然存在。请注意,我的代码都在一个文件中,因为C++模板不像普通的.h/.cpp那样。
我假设有人过去肯定已经做过这件事,可能创建了自定义版本的宏,但我无法通过搜索找到它,因为“template”还有其他含义。