Bit eines Gedankenexperiment vergangen ... Ingredient 1: eine Klasse in einer (vorkompilierte) gemeinsam benutzte Bibliothek, die eine Funktion hat, die einen Zeiger auf ein Objekt benötigt, um von Ostream abgeleitet:Template Funktion gemeinsam benutzte Bibliothek (C++)
void ClassName::SetDefaultStream(std::ostream *stream)
Ingredient 2:
Meine eigene Klasse ZUSAMMENHANG std :: ostream, mit einigen generic Templat Strom Betreiber:
class MyStream : public std::ostream
{
public:
template <typename T> MyStream &operator<<(const T &data)
{
std::cout << data;
return *this;
}
}
Nun, wenn ich übergeben Sie die Adresse eines instantiati einer dieser Klasse in der SetDefaultStream-Methode, was wird passieren? Zur Kompilierzeit hat der Compiler keine Ahnung, welche Typen auf den Stream in der Shared-Klasse angewendet werden, also wird sicher kein Code synthetisiert? Kann es nicht kompiliert werden, wird es kompiliert und stürzt beim Ausführen ab, kommt Rauch aus dem Computer?