Существует множество специальных макросов, которые 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, как обычно.
Я предполагаю, что кто-то должен был делать это в прошлом, возможно, создавая собственные версии макросов, но я не могу найти его с помощью поиска, так как «шаблон» имеет другие значения.