【发布时间】:2010-06-09 10:16:16
【问题描述】:
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。
我假设过去一定有人这样做过,可能创建了自定义版本的宏,但我无法通过搜索找到它,因为“模板”还有其他含义。
【问题讨论】:
-
您遇到了哪些错误?