Je SURCHARGE opérateur < < pour mettre en œuvre un flux comme interface pour une classe:VC6 et erreur modèle
template<typename T>
CAudit& operator << (const T& data) {
audittext << data;
return *this;
}
CAudit& operator << (LPCSTR data) {
audittext << data;
return *this;
}
La version du modèle ne peut pas compiler avec « erreur fatale C1001: ERREUR INTERNE COMPILER (fichier compilateur « MSC1 .cpp ', ligne 1794) ". Les fonctions non-template se compilent toutes correctement.
Est-ce dû à des manques de VC6 lors de la manipulation des templates et y a-t-il un moyen de contourner ce problème?
Merci, Patrick
EDIT:
la classe complète est:
class CAudit
{
public:
/* TODO_DEBUG : doesn't build!
template<typename T>
CAudit& operator << (const T& data) {
audittext << data;
return *this;
}*/
~CAudit() { write(); }//If anything available to audit write it here
CAudit& operator << (LPCSTR data) {
audittext << data;
return *this;
}
//overload the << operator to allow function ptrs on rhs, allows "audit << data << CAudit::write;"
CAudit& operator << (CAudit & (*func)(CAudit &))
{
return func(*this);
}
void write() {
}
//write() is a manipulator type func, "audit << data << CAudit::write;" will call this function
static CAudit& write(CAudit& audit) {
audit.write();
return audit;
}
private:
std::stringstream audittext;
};
Le problème se produit avec la surcharge de fonction de l'opérateur < < qui est utilisé pour permettre à écrire() à être utilisé comme un manipulateur de flux:
CAudit audit
audit << "Billy" << write;
Puis-je voir le code source complet? – adatapost