2016-06-05 9 views
0

Ich habe eine Vorlagenklasse, die eine Vorlage als Wrapper für MFC CWnd Objekte ist.So erstellen Sie ein Array/Vektor von Vorlagenvorlagen

In der Hauptklasse möchte ich eine Auflistung der Steuerelemente für ein Panel haben, aber ich sehe nicht, wie ich ein Array von ihnen erstellen kann, da sie offensichtlich von verschiedenen Basisklassen abgeleitet sind (zB CButtonCtrl, CListBox , etc.).

template<typename W> 
class Component : public W 
{ 
public: 
    Component(uint_t nId = -1, CWnd *pParent = NULL, const char *pName = NULL) 
     : mParent(pParent) 
     , mName(pName) 
     , mId(nId) 
    { 
     //std::cout << ((mName != NULL) ? mName : "NULL") << ": " << (void *)this << ": Id:" << mId << " Parent:" << (void *)mParent << std::endl; 
    } 

    const char *getName(void) const { return mName; } 

    void setId(uint_t nId) { mId = nId; } 
    uint_t getId(void) const { return mId; } 

    void setParent(CWnd *pParent) { mParent = pParent; } 
    CWnd *getParent() const { return mParent; } 

private: 
    uint_t mId; 
    CWnd *mParent; 
    const char *mName; 
}; 

Die Hauptklasse:

class Panel : public Component<CDialog> 
{ 
public: 
    Panel(uint_t nId = -1, CWnd *pParent = NULL, const char *pComponentName = NULL); 
    virtual ~Panel(void) {}; 

    virtual void CreateWnd(CWnd *pParent = NULL); 

    template <typename W> 
    void addComponent(Component<W> *pComponent) 
    { 
    } 

    template <typename W> 
    void removeComponent(Component<W> *pComponent) 
    { 
    } 

    void Show(bool bShow = true) override; 

protected: 
    typedef std::vector<Component<?> *> Components; 

private: 
    Components mComponents; 
}; 

In Java gibt es eine Syntax für unbekannte Generika wie diese Component<?> so eine Sammlung von gemeinsamen Objekten in einem Array speichern Ich könnte, aber ich bin mir nicht bewusst auf wie man das in C++ macht. Ich weiß, dass ich den Zeiger wegen der Verschraubung benutzen muss, aber das ist hier nicht das Problem.

Visual Studio 2010.

+0

"Templat Objekte" versuchen, nicht viel Sinn machen. Vorlagen gelten für Typen oder Funktionen. – juanchopanza

Antwort

0

Sie möchten boost::any oder std::any

Verwandte Themen