OVH Cloud OVH Cloud

copie de flot

2 réponses
Avatar
Anne Sophie Tranchant
Bonjour,

J'ai un flot (ofstream) comme attribut d'une classe. Je ne sais pas
comment le recopier dans mon constructeur par recopie, l'operateur = ne
fonctionne pas (il est apparemment prive). Quelqu'un saurait-il comment
faire mon constructeur par recopie ?

Anne-Sophie.

2 réponses

Avatar
Fabien LE LEZ
On Mon, 21 Mar 2005 13:59:01 +0100, Anne Sophie Tranchant
:

J'ai un flot (ofstream) comme attribut d'une classe. Je ne sais pas
comment le recopier dans mon constructeur par recopie


Tu ne peux pas mettre de constructeur de copie dans ce cas.
D'ailleurs, qu'est-ce que ça voudrait dire, d'après toi, de copier un
ofstream ? La seule interprétation raisonnable que je vois, ce serait
de recopier le fichier à l'identique, avec le même nom. Or, sur la
plupart des systèmes, deux fichiers ne peuvent avoir le même nom.


--
;-)

Avatar
kanze
Anne Sophie Tranchant wrote:

J'ai un flot (ofstream) comme attribut d'une classe. Je ne
sais pas comment le recopier dans mon constructeur par
recopie, l'operateur = ne fonctionne pas (il est apparemment
prive). Quelqu'un saurait-il comment faire mon constructeur
par recopie ?


Ça dépend de la sémantique voulue. Une copie d'un flux n'a en
principe aucun sens, mais selon les cas :

-- on peut utiliser un flux alloué dymaiquement, avec un
boost::shared_ptr ou quelque chose de semblable qui lui
pointe, ou

-- on peut définir une sémantique -- si le flux est toujours un
fstream, par exemple, on ouvre un nouveau instance avec le
même nom de fichier, et on fait un seek à la position où on
se trouve dans le premier flux.

Ou autre choses encore. Définir la sémantique que tu veux, et on
doit pouvoir l'implémenter.

Ceci dit, dans les objets que j'ai eu qui ont contenu un flux,
il ne m'est jamais encore arrivé de vouloir les copier.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34