Ist es möglich, einen STL-Container in einer Header-Datei weiterzuleiten? Nehmen wir zum Beispiel den folgenden Code:Vorwärts deklarieren Sie einen STL-Container?
#include <vector>
class Foo
{
private:
std::vector<int> container_;
...
};
ich in der Lage sein, so etwas zu tun:
namespace std
{
template <typename T> class vector;
}
class Foo
{
private:
std::vector<int> container_;
...
};
Kann dies geschehen?
Ich folgte Ihrem Link zu der Diskussion, aber die Leute scheinen nicht zu einer Schlussfolgerung zu kommen. Offensichtlich darf die stl-Implementierung den Standardcontainern keine Vorlagenparameter hinzufügen. Daher sollte es erlaubt sein, die Vorlage weiterzuleiten. – Haplo
Es ist nicht definiert, @Haplo. Wenn die von dir verwendete Implementierung * das Verhalten über das hinaus definiert, was der Standard sagt, ist das großartig, aber es ist immer noch undefiniert, also wird dein Code nicht portierbar sein. Die Schlussfolgerung (nach unwidersprochenen Anweisungen zu urteilen) ist, dass der Standard dies zulässt, aber nicht, und dass es zwei Problemumgehungen gibt: Umbrechen Sie die Standardtypen in vorwärts deklarierte Benutzerstrukturen, oder beißen Sie einfach das Aufzählungszeichen und fügen Sie den Standardkopf ein . Letzteres ist einfach zu machen. –
"Unverbotene Aussagen" im Usenet sind kaum eine maßgebliche Quelle. Aber Jerry Coffin hat recht, wenn er [namespace.std]/1 zitiert. In der Praxis, wenn Ihr Compiler 'Namespace std' Deklarationen in Nicht-System-Headern diagnostiziert, oder wenn Ihre Standard-Bibliothek nicht in C++ implementiert ist, könnten Sie ein Problem haben, aber diese Dinge passieren nie – Potatoswatter