2012-01-05 62 views
4

私は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)を使用

答えて

3

まず、。

第2に、DECLARE_ *を使用しないことで遭遇する唯一の問題は、MFC DYNAMIC_DOWNCASTマクロを使用してCMyViewTとの間でダウンキャストすることです。とにかくC++ dynamic_castが好ましい。

各スペシャライゼーションごとにテンプレートの派生を行う予定がある場合は、実際に派生物のテンプレートビューでDECLARE_DYNCREATEは必要ありません。

+0

+1ですが、次の記事ではIMPLEMENT_DYNCREATE_Tマクロがバグでサポートされていないことを示しています。 https://connect.microsoft.com/VisualStudio/feedback/details/161025/implement-dynamic-t-mfc-macro-for-c-templates-does-not-compile –

+0

動作するように設計されているため、テンプレートの特殊化の派生物を作ることが最良の選択肢のように見えます。 –

関連する問題