Bonjour,
Le code suivant est extrait de boost (boost/exception/exception.hpp).
Code :
- template <class Tag,class T>
- class error_info;
- typedef error_info<struct tag_throw_function,char const *> throw_function;
- typedef error_info<struct tag_throw_file,char const *> throw_file;
- typedef error_info<struct tag_throw_line,int> throw_line;
- template <>
- class
- error_info<tag_throw_function,char const *>
- {
- public:
- typedef char const * value_type;
- value_type v_;
- explicit
- error_info( value_type v ):
- v_(v)
- {
- }
- };
- template <>
- class
- error_info<tag_throw_file,char const *>
- {
- public:
- typedef char const * value_type;
- value_type v_;
- explicit
- error_info( value_type v ):
- v_(v)
- {
- }
- };
- template <>
- class
- error_info<tag_throw_line,int>
- {
- public:
- typedef int value_type;
- value_type v_;
- explicit
- error_info( value_type v ):
- v_(v)
- {
- }
- };
|
Je me pose deux questions :
- Pourquoi utiliser le mot clef struct pour les lignes typedef error_info< struct ... ?
- Il me semble que template <> ... est utilisé pour faire une spécialisation totale du template mais visiblement un seul des deux types est spécifié. Est-ce licite d'écrire un truc comme ça ?
Merci d'avance pour vos réponses.