partial-template-specialization
-
ich habe eine klasse:
template< class char_type, class traits_type=std::char_traits<char_type>, class allocator_type=std::allocator<char_type> > class basic_archive{ static const char_type* mark; };nun will ich einen standartwert für 'mark' setzen:
(beispiel für char_type == 'char')template<class traits_type,class allocator_type> const char* basic_archive<char,traits_type,allocator_type>::mark = "mark";allerdings gibt es einen fehler:
error C3860: template argument list following class template name must list parameters in the order used in template parameter list
leider weiß ich nicht wie ich es anders machen sollte und wäre dankbar für eure hilfe

PS: vorübergehend habe ich es folgendermaßen gelöst:
template<class char_type> class mark_helper{ static const char_type* mark; }; template<> const char* mark_helper<char>::mark;und darauf dann in basic_archive zugegriffen, aber das geht doch bestimmt auch schöner

-
So direkt geht das leider nicht.
Als allgemein gutes Design würde ich dir allerdings raten, Member, die nur vom
char_typeabhängen, auszulagern:template<class char_type> class basic_archive_impl { static const char_type* mark; }; template<> const char* basic_archive_impl<char>::mark = "mark"; template< class char_type, class traits_type=std::char_traits<char_type>, class allocator_type=std::allocator<char_type> > class basic_archive : basic_archive_impl<char_type> { };Einer der Vorteile ist, dass die Funktionen innerhalb von
basic_archive_implnur einmal prochar_typedefiniert werden, während sie in deinem Ansatz unter Umständen mehrfach vorkommen würden (wegen anderem Trait oder Allocator).
-
s/definiert/instanziiert/
-
okay, also war ich auf dem richtigen weg

danke für deine hilfe