Objet sans constructeur par defaut et lecture fichier
5 réponses
Marc Boyer
Bonjour,
une question de design: soit une classe C qui ne possède
pas de constructeur sans paramètre. Comment créer une
telle variable à partir d'un flux d'entrée (fichier).
J'hésite en une méthode statique:
C readC(std::istream&);
et un constructeur (explicite)
C(std::istream&);
En fait, le constructeur me semble la meilleure solution,
mais quelque chose me chagrine, un vieux réflexe de séparer
le coeur des traitements des E/S...
Des idées ? Du temps à perdre sur fclc++ ?
Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Loïc Joly
Bonjour,
une question de design: soit une classe C qui ne possède pas de constructeur sans paramètre. Comment créer une telle variable à partir d'un flux d'entrée (fichier).
J'hésite en une méthode statique: C readC(std::istream&); et un constructeur (explicite) C(std::istream&);
En fait, le constructeur me semble la meilleure solution, mais quelque chose me chagrine, un vieux réflexe de séparer le coeur des traitements des E/S...
Des idées ? Du temps à perdre sur fclc++ ?
La bibliothèque de sérialisation de boost résoud cette question en exigeant la présence d'un constructeur par défaut, quitte à ce qu'il soit privé avec la classe de sérialisation comme seule amie.
-- Loïc
Bonjour,
une question de design: soit une classe C qui ne possède
pas de constructeur sans paramètre. Comment créer une
telle variable à partir d'un flux d'entrée (fichier).
J'hésite en une méthode statique:
C readC(std::istream&);
et un constructeur (explicite)
C(std::istream&);
En fait, le constructeur me semble la meilleure solution,
mais quelque chose me chagrine, un vieux réflexe de séparer
le coeur des traitements des E/S...
Des idées ? Du temps à perdre sur fclc++ ?
La bibliothèque de sérialisation de boost résoud cette question en
exigeant la présence d'un constructeur par défaut, quitte à ce qu'il
soit privé avec la classe de sérialisation comme seule amie.
une question de design: soit une classe C qui ne possède pas de constructeur sans paramètre. Comment créer une telle variable à partir d'un flux d'entrée (fichier).
J'hésite en une méthode statique: C readC(std::istream&); et un constructeur (explicite) C(std::istream&);
En fait, le constructeur me semble la meilleure solution, mais quelque chose me chagrine, un vieux réflexe de séparer le coeur des traitements des E/S...
Des idées ? Du temps à perdre sur fclc++ ?
La bibliothèque de sérialisation de boost résoud cette question en exigeant la présence d'un constructeur par défaut, quitte à ce qu'il soit privé avec la classe de sérialisation comme seule amie.
-- Loïc
Marc Boyer
Loïc Joly wrote:
En fait, le constructeur me semble la meilleure solution, mais quelque chose me chagrine, un vieux réflexe de séparer le coeur des traitements des E/S...
Des idées ? Du temps à perdre sur fclc++ ?
La bibliothèque de sérialisation de boost résoud cette question en exigeant la présence d'un constructeur par défaut, quitte à ce qu'il soit privé avec la classe de sérialisation comme seule amie.
Constructeur privé ou absent, je ne vois pas trop la différence dans l'interface. Mais donc, ils partent sur l'idée d'une fabrique de C à partir d'une autre classe amie.
Marc Boyer -- Je ne respecte plus le code de la route à vélo depuis une double fracture due au fait que j'étais le seul à le respecter.
Loïc Joly wrote:
En fait, le constructeur me semble la meilleure solution,
mais quelque chose me chagrine, un vieux réflexe de séparer
le coeur des traitements des E/S...
Des idées ? Du temps à perdre sur fclc++ ?
La bibliothèque de sérialisation de boost résoud cette question en
exigeant la présence d'un constructeur par défaut, quitte à ce qu'il
soit privé avec la classe de sérialisation comme seule amie.
Constructeur privé ou absent, je ne vois pas trop la différence
dans l'interface.
Mais donc, ils partent sur l'idée d'une fabrique de C à partir
d'une autre classe amie.
Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.
En fait, le constructeur me semble la meilleure solution, mais quelque chose me chagrine, un vieux réflexe de séparer le coeur des traitements des E/S...
Des idées ? Du temps à perdre sur fclc++ ?
La bibliothèque de sérialisation de boost résoud cette question en exigeant la présence d'un constructeur par défaut, quitte à ce qu'il soit privé avec la classe de sérialisation comme seule amie.
Constructeur privé ou absent, je ne vois pas trop la différence dans l'interface. Mais donc, ils partent sur l'idée d'une fabrique de C à partir d'une autre classe amie.
Marc Boyer -- Je ne respecte plus le code de la route à vélo depuis une double fracture due au fait que j'étais le seul à le respecter.
Laurent Deniau
Marc Boyer wrote:
Bonjour,
une question de design: soit une classe C qui ne possède pas de constructeur sans paramètre. Comment créer une telle variable à partir d'un flux d'entrée (fichier).
J'hésite en une méthode statique: C readC(std::istream&); et un constructeur (explicite) C(std::istream&);
si tu veux que ce soit explicite, utilise explicit ;-)
En fait, le constructeur me semble la meilleure solution, mais quelque chose me chagrine, un vieux réflexe de séparer le coeur des traitements des E/S...
Je prefere aussi le constructeur.
Des idées ? Du temps à perdre sur fclc++ ?
J'utilise des formateurs. Il s'occupe de contruire des classes associees a partir du contenu du fichier. Moi non plus je n'aime pas melanger les E/S avec le reste.
a+, ld.
Marc Boyer wrote:
Bonjour,
une question de design: soit une classe C qui ne possède
pas de constructeur sans paramètre. Comment créer une
telle variable à partir d'un flux d'entrée (fichier).
J'hésite en une méthode statique:
C readC(std::istream&);
et un constructeur (explicite)
C(std::istream&);
si tu veux que ce soit explicite, utilise explicit ;-)
En fait, le constructeur me semble la meilleure solution,
mais quelque chose me chagrine, un vieux réflexe de séparer
le coeur des traitements des E/S...
Je prefere aussi le constructeur.
Des idées ? Du temps à perdre sur fclc++ ?
J'utilise des formateurs. Il s'occupe de contruire des classes associees
a partir du contenu du fichier. Moi non plus je n'aime pas melanger
les E/S avec le reste.
une question de design: soit une classe C qui ne possède pas de constructeur sans paramètre. Comment créer une telle variable à partir d'un flux d'entrée (fichier).
J'hésite en une méthode statique: C readC(std::istream&); et un constructeur (explicite) C(std::istream&);
si tu veux que ce soit explicite, utilise explicit ;-)
En fait, le constructeur me semble la meilleure solution, mais quelque chose me chagrine, un vieux réflexe de séparer le coeur des traitements des E/S...
Je prefere aussi le constructeur.
Des idées ? Du temps à perdre sur fclc++ ?
J'utilise des formateurs. Il s'occupe de contruire des classes associees a partir du contenu du fichier. Moi non plus je n'aime pas melanger les E/S avec le reste.
a+, ld.
Marc Boyer
Laurent Deniau wrote:
une question de design: soit une classe C qui ne possède pas de constructeur sans paramètre. Comment créer une telle variable à partir d'un flux d'entrée (fichier).
J'hésite en une méthode statique: C readC(std::istream&); et un constructeur (explicite) C(std::istream&);
si tu veux que ce soit explicite, utilise explicit ;-)
Taquin va.
En fait, le constructeur me semble la meilleure solution, mais quelque chose me chagrine, un vieux réflexe de séparer le coeur des traitements des E/S...
Je prefere aussi le constructeur.
Des idées ? Du temps à perdre sur fclc++ ?
J'utilise des formateurs. Il s'occupe de contruire des classes associees a partir du contenu du fichier. Moi non plus je n'aime pas melanger les E/S avec le reste.
En fait, comme c'est un petit projet jetable et que j'ai renoncé à sortir l'artillerie de la classe de sérialisation / formateur, ça ne peut pas être complètement joli.
Marc Boyer -- Je ne respecte plus le code de la route à vélo depuis une double fracture due au fait que j'étais le seul à le respecter.
Laurent Deniau wrote:
une question de design: soit une classe C qui ne possède
pas de constructeur sans paramètre. Comment créer une
telle variable à partir d'un flux d'entrée (fichier).
J'hésite en une méthode statique:
C readC(std::istream&);
et un constructeur (explicite)
C(std::istream&);
si tu veux que ce soit explicite, utilise explicit ;-)
Taquin va.
En fait, le constructeur me semble la meilleure solution,
mais quelque chose me chagrine, un vieux réflexe de séparer
le coeur des traitements des E/S...
Je prefere aussi le constructeur.
Des idées ? Du temps à perdre sur fclc++ ?
J'utilise des formateurs. Il s'occupe de contruire des classes associees
a partir du contenu du fichier. Moi non plus je n'aime pas melanger
les E/S avec le reste.
En fait, comme c'est un petit projet jetable et que j'ai renoncé
à sortir l'artillerie de la classe de sérialisation / formateur,
ça ne peut pas être complètement joli.
Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.
une question de design: soit une classe C qui ne possède pas de constructeur sans paramètre. Comment créer une telle variable à partir d'un flux d'entrée (fichier).
J'hésite en une méthode statique: C readC(std::istream&); et un constructeur (explicite) C(std::istream&);
si tu veux que ce soit explicite, utilise explicit ;-)
Taquin va.
En fait, le constructeur me semble la meilleure solution, mais quelque chose me chagrine, un vieux réflexe de séparer le coeur des traitements des E/S...
Je prefere aussi le constructeur.
Des idées ? Du temps à perdre sur fclc++ ?
J'utilise des formateurs. Il s'occupe de contruire des classes associees a partir du contenu du fichier. Moi non plus je n'aime pas melanger les E/S avec le reste.
En fait, comme c'est un petit projet jetable et que j'ai renoncé à sortir l'artillerie de la classe de sérialisation / formateur, ça ne peut pas être complètement joli.
Marc Boyer -- Je ne respecte plus le code de la route à vélo depuis une double fracture due au fait que j'étais le seul à le respecter.
Marc Boyer
Marc Boyer wrote:
une question de design: soit une classe C qui ne possède pas de constructeur sans paramètre. Comment créer une telle variable à partir d'un flux d'entrée (fichier).
J'hésite en une méthode statique: C readC(std::istream&); et un constructeur (explicite) C(std::istream&);
En fait, le constructeur me semble la meilleure solution, mais quelque chose me chagrine, un vieux réflexe de séparer le coeur des traitements des E/S...
Je me réponds à moi même: le constructeur n'est pas du tout pratique. D'abord, si on stoque des C les uns à la suite des autres dans un flux, il devient difficile de gérer la fin de fichier. Ensuite, si on essaye de faire de la composition (des C membres d'une autre classe X), ça devient touffu.
class C { public: C(std::istream&); }
class X { private: C c1, c2; public: X(std::istream& s):c1(s),c2(s){}; }
Avec l'ordre d'évaluation des constructeurs dépendant de la déclaration dans X...
Non, c'était pas une bonne idée...
Marc Boyer -- Je ne respecte plus le code de la route à vélo depuis une double fracture due au fait que j'étais le seul à le respecter.
Marc Boyer wrote:
une question de design: soit une classe C qui ne possède
pas de constructeur sans paramètre. Comment créer une
telle variable à partir d'un flux d'entrée (fichier).
J'hésite en une méthode statique:
C readC(std::istream&);
et un constructeur (explicite)
C(std::istream&);
En fait, le constructeur me semble la meilleure solution,
mais quelque chose me chagrine, un vieux réflexe de séparer
le coeur des traitements des E/S...
Je me réponds à moi même: le constructeur n'est pas du tout
pratique.
D'abord, si on stoque des C les uns à la suite des autres
dans un flux, il devient difficile de gérer la fin de fichier.
Ensuite, si on essaye de faire de la composition (des C membres
d'une autre classe X), ça devient touffu.
class C {
public:
C(std::istream&);
}
class X {
private:
C c1, c2;
public:
X(std::istream& s):c1(s),c2(s){};
}
Avec l'ordre d'évaluation des constructeurs dépendant de la déclaration
dans X...
Non, c'était pas une bonne idée...
Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.
une question de design: soit une classe C qui ne possède pas de constructeur sans paramètre. Comment créer une telle variable à partir d'un flux d'entrée (fichier).
J'hésite en une méthode statique: C readC(std::istream&); et un constructeur (explicite) C(std::istream&);
En fait, le constructeur me semble la meilleure solution, mais quelque chose me chagrine, un vieux réflexe de séparer le coeur des traitements des E/S...
Je me réponds à moi même: le constructeur n'est pas du tout pratique. D'abord, si on stoque des C les uns à la suite des autres dans un flux, il devient difficile de gérer la fin de fichier. Ensuite, si on essaye de faire de la composition (des C membres d'une autre classe X), ça devient touffu.
class C { public: C(std::istream&); }
class X { private: C c1, c2; public: X(std::istream& s):c1(s),c2(s){}; }
Avec l'ordre d'évaluation des constructeurs dépendant de la déclaration dans X...
Non, c'était pas une bonne idée...
Marc Boyer -- Je ne respecte plus le code de la route à vélo depuis une double fracture due au fait que j'étais le seul à le respecter.