2009-03-02 20 views
2

Bit d'une expérience de pensée ... Ingrédient 1: Une classe dans un (précompilés) bibliothèque partagée qui a une fonction qui prend un pointeur vers un objet dérivé de ostream:fonction de modèle transmis à la bibliothèque partagée (C++)

void ClassName::SetDefaultStream(std::ostream *stream) 

Ingrédient 2:

Ma classe dérivant de std :: ostream, avec un certain opérateur de flux générique basé sur un modèle:

class MyStream : public std::ostream 
{ 
    public: 
     template <typename T> MyStream &operator<<(const T &data) 
     { 
     std::cout << data; 
     return *this; 
     } 
} 

maintenant, si je passe l'adresse d'un instantiati de cette classe dans la méthode SetDefaultStream, que va-t-il se passer? Au moment de la compilation, le compilateur n'a aucune idée des types qui seront appliqués au flux dans la classe partagée, donc aucun code ne sera synthétisé. Va-t-il échouer à compiler, compilera-t-il, puis tombera-t-il en panne, fumera-t-il de l'ordinateur?

Répondre

6

Votre memmber modèle ne sera pas visible dans la bibliothèque, puisqu'il ne s'agit pas d'un membre virtuel de la base std :: ostream. Aucun problème ne se produira.

3

il compilera mais votre opérateur ne sera pas appelé.