Forward-Declaration von Klassentemplates



  • Hi,

    ich würde gerne in meinen Header-Dateien das Klassentemplate boost::variant forward deklarieren, um den Standard-Namespace nicht unnötig zu verschmutzen. Das Problem mit boost::variant ist nun, dass es verschiedene Anzahl an Template-Parametern haben kann: Bei folgendem Toy Example

    namespace boost {
    	template<class, class> class variant;
    	template<class, class, class> class variant;
    }
    
    int main() {
    
    }
    

    bekomme ich die Fehlermeldung

    ../src/test.cpp:3: error: redeclared with 3 template parameter(s)
    ../src/test.cpp:2: note: previous declaration ‘template<class, class> struct boost::variant’ used 2 template parameter(s)
    

    Von daher die Frage: Kann man Klassentemplates mit variierender Anzahl an Parametern irgendwie forward deklarieren?



  • Das brauchst du gar nicht machen, denn boost gibt dir schon den Header** <boost/variant/variant_fwd.hpp> **vor. Binde einfach den ein, da ist u.a. variant deklariert.



  • Im konkreten Fall

    #include <boost/variant/variant_fwd.hpp>
    

    Allgemein:

    template<typename...> class foo;
    

    bzw. ähnliche Deklarationen. Du musst das halt 1:1 aus der Bibliothek übernehmen und hoffen, dass sich nie was dran ändert. Wenn die Bibliothek einen Forward-Header hat, ist es besser, den zu benutzen.


Anmelden zum Antworten