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.variantdeklariert.
-
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.