Vordwarddeklaration für template Klassen



  • Ich habe einen Typ:

    template <typename T,typename streamconverter = std::stringstream>
    	struct streamconvertMultilineType
    	{
    		const T & const_value;
    		streamconvertMultilineType(const T & val) : const_value ( val) {}
    	};
    

    der hier eingesetzt werden soll:

    template <class KBIniError = KBIniException >
    class KBIniBase
    {
     //.....
    public:
    template<class T,class U>
    bool				writeString	(const std::string & Section,const std::string &,const KB::streamconvertMultilineType<T,U> & Value);
    
    template<class T,class U >
      T					readString	(const std::string & Section,const std::string & Key,const KB::streamconvertMultilineType<T,U> & Value,bool * kommentar = NULL);
    
    }
    

    Ich meine zu wissen das Templates nur Übersetzt werden wenn sie verwendet werden. (Man also Methoden ausblenden kann für die keine Vorraussetzungen da sind)

    Da streamconvertMultilineType in einem anderen Header steckt der u.U. nicht zu verfügung steht wollte ich hier eine Forwarddeklaration für die Referenz erwirken in der Hoffnung das der Header nicht benötigt wird wenn niemand diesen Typ verwendet. (Wird bisher nur in einem Projekt benötigt)

    Entweder geht das so garnicht oder ich stelle mich für die Forwarddeklaration zu blöd an.

    Ich versuchte es so:

    namespace KB
    {
      template<class T,class U>
       struct  streamconvertMultilineType<T,U>;
    }
    

    Der Comiler hielt davon aber nix (VC7.1)

    Würde mich freuen wenn mir jemand das Brett vorm Kopf wegnehmen würde 🤡

    thx



  • laß die templateinstanziierung weg:

    template<typename T, typename U> struct streamconvertMultilineType;
    


  • *Das Brett vom Boden aufheb und wegleg*

    Danke fürs Licht anmachen 🤡 👍

    Scheint zu klappen.

    thx


Anmelden zum Antworten