hm problem lösbar mit templates



  • Hallo allerseits,

    ich habe eine Tempaltes Classe Parameter:

    class CParameter{
    	std::pair<char,T>  m_PairParameter;
    	public:
    		CSignalParameter(char, T);
    };
    
    template <class T>
    CParameter<T>::CParameter(char nDC, T Parameter){
    	m_PairParameter.first = nDC;
    	m_PairParameter.second = Parameter;
    }
    

    der 2-te Parameter der pair kann einen string oder einen unsigned short sein

    Instanzen der Classe CParameter werden in dem Vector m_theParameters eingespeist

    class CParameterContainer  {
    private:
    	std::vector<CParameter<class T>*> m_theParameters;
    public:
            bool pushParameter(std::string, char, unsigned short);
    	bool pushParameter(std::string, char, std::string);
    

    über die Functionen: pushParameter

    die definition der Functionen schaut so aus:

    bool CParameterTable::pushSignalParameter(string strSignalName, char nDC, string strParameter){
    	CParameterContainer<std::string>* theStringParameter = new CParameterContainer<std::string>(nDC,strParameter);
    	m_theParameters.push_back(theStringParameter);
    	return true;
    }
    

    für strings und für unsigned shorts:

    bool CParameterTable::pushSignalParameter(string strSignalName, char nDC, unsigned short nParameter){
    	CParameterContainer<std::string>* theShortParameter = new CParameterContainer<std::string>(nDC,nParameter);
    	m_theParameters.push_back(theShortParameter);
    	return true;
    }
    

    leider meckert der compiler, dass die classe T definiert sein soll bei der declaration von m_theParameters.



  • Du mußt die Containerklasse auch als Template definieren, damit du eine Zuordnung zu den Parametertypen bekommst. (und btw sind CParameter<short> und CParameter<string> zwei völlig verschiedene Typen, die kannst du nicht in einen Vektor packen)



  • ok wenn die CParameter-Classe abstract is, und dann 2 abgeleitete Classen CShortParameter und CStringParameter. Dann die Parameter über Polymorphie in dem Vector einspeisen.

    ist lösung mit templates unbrauchbar?



  • darkstar2000 schrieb:

    ok wenn die CParameter-Classe abstract is, und dann 2 abgeleitete Classen CShortParameter und CStringParameter. Dann die Parameter über Polymorphie in dem Vector einspeisen.

    Ja, das wäre eine Lösung

    ist lösung mit templates unbrauchbar?

    Für deine Anwendung: JA


Anmelden zum Antworten