Je veux surcharger operator <<()
pour ma propre classe qui est également un modèle. Mes cours sont les suivantes:operator <<() pour la classe de modèle
template<
typename RefCountType,
typename TraitsType = std::char_traits<char>,
typename Allocator = std::allocator<typename TraitsType::char_type>
>
class rep {
// ...
};
template<typename RepType>
class t_zstring {
// ...
};
Le code pour operator<<()
est:
template<
typename CharType,
typename TraitsType,
typename Allocator,
typename RefCountType,
template<class,class,class> class RepType
>
inline std::basic_ostream<CharType,TraitsType>&
operator<<(std::basic_ostream<CharType,TraitsType> &os,
t_zstring< RepType<RefCountType,TraitsType,Allocator> > const &s) {
return os << s.c_str();
}
Le code du modèle compile très bien; Cependant, lorsque je tente de l'utiliser comme (avec le code de la classe elided my_ref_count
):
typedef rep<my_ref_count> my_rep;
typedef t_zstring<my_rep> zstring;
zstring z;
cout << z; // ztest.cpp, line 201
je reçois (en utilisant g ++ 4.2.1):
ztest.cpp:201: error: no match for ‘operator<<’ in ‘std::cout << z1’
Comment puis-je déclarer mon operator<<()
correctement afin que le compilateur trouve la bonne correspondance?
Si pas 'l'opérateur <<()' prendre un seul paramètre? –
@klez - non, puisque 'operator <<' est une fonction libre ici, il a besoin de deux paramètres. –
@R Samuel Klatchko, parfait, maintenant je suis encore plus sûr que je ne connais pas bien le C++: D –