私はMFC CViewクラスとテンプレートクラスから派生した基本クラスを持っています。MFCの抽象基本クラスでDECLARE_DYNAMICが必要ですか?
template<class TYPE>
class CMytViewT : public CView,public CMyTemplateClassT<TYPE>
{
DECLARE_DYNCREATE(CMyViewT<TYPE>)
private:
CMyViewT();
'
'
'
}
IMPLEMENT_DYNCREATE(CMyViewT<TYPE>, CView)
は今、私はMFCのマクロはテンプレートで怒るしようとしている、そしてこのクラスの動的生成マクロを削除する検討していますし、テンプレートの各専門分野のためにそれを再導入推測しています。例
template<class TYPE>
class CMytViewT : public CView,public CMyTemplateClassT<TYPE>
{
public:
CMyViewT();
'
'
'
}
Class CMyView : public CMyViewT<CMyClass>
{
DECLARE_DYNCREATE(CMyView)
private:
CMyView();
}
IMPLEMENT_DYNCREATE(CMyView, CView)
のために私は思ったんだけど、私が見てきた他の実装では、すべての中間クラスのために含まれたマクロを持っているように、今後の問題を引き起こすことが起こって、このです。私はそれがすべきであることを知ることができませんが、私は何かを逃したのですか?
編集以下答えるマシュー・ホルダーを見た後、私はIMPLEMENT_DYNAMIC_Tのサポートが原因であることバギーに削除されたと述べた、以下のmicrosoft connect articleを発見しました。あなたがDECLARE_DYNCREATE
をサポートし、DECLARE_DYNCREATE
から<TYPE>
を削除したい場合は、テンプレート上の各専門分野のためのIMPLEMENT_DYNCREATE_T(CMyViewT, {specialization}, CView)
を使用
+1ですが、次の記事ではIMPLEMENT_DYNCREATE_Tマクロがバグでサポートされていないことを示しています。 https://connect.microsoft.com/VisualStudio/feedback/details/161025/implement-dynamic-t-mfc-macro-for-c-templates-does-not-compile –
動作するように設計されているため、テンプレートの特殊化の派生物を作ることが最良の選択肢のように見えます。 –