Je pense que je vais y aller et commencer avec le code:
int main() { auto os = test("testfile"); os << "Test1\n"; auto os2 = std::move(os); os2 << "Test2\n"; }
3 Réponses :
Le problème est avec ceci:
test(test&& old) : std::ofstream(std::move(old)) {};
Votre réponse donne l'erreur de compilation suivante sur GCC 4.5: "'std :: ios_base :: ios_base (const std STD :: ios_base &)' est privé". Êtes-vous sûr d'avoir ceci pour compiler et si oui, sur quel compilateur?
@Clinton: Je n'ai pas essayé de compiler votre code, bien que j'ai fait cela plusieurs fois auparavant. (Remarque "Il compile" n'est pas nécessairement testé pour qu'il soit correct C ++). Vous devez modifier votre question pour inclure le nouveau code que vous essayez et toutes les erreurs.
Êtes-vous sûr d'un constructeur de rvalue?
@Clinton: Yup, en C ++ 0x. Assurez-vous que vous compilez avec cela activé.
En C ++ 0X, vous devriez être capable de retourner ou de déplacer l'Ofstream directement, sans avoir besoin de l'envelopper dans votre test. Bien que avec le constructeur de déplacement de test corrigé, l'emballage est également correct.
Est-ce que l'appelant doit savoir que vous retournez un destream code> ou aurait-il plus de sens de renvoyer un
streambuf code> et laissez l'appelant en envelopper dans un flux ? p>
Je vais répondre à ma propre question ici: p>
dans le Caractéristiques de la bibliothèque GCC C ++ 0x Page, ont Un regard sur le point 27.9, qui lit: p>
27.9 - Streams à base de fichiers - partielle - Déplacement manquant et opérations d'échange p> blockQuote>
Je suppose que c'est probablement la question que j'ai avec GCC. P>
Oui, ça le ferait. Bonne trouvaille, cependant.
Toujours vrai maintenant?
Ne ressemble pas à ça non. N'hésitez pas à éditer la question et répondre si vous le pouvez.