Bonjour,

Je travaille sur un lecteur de CSV (CSV_reader) ligne par ligne, sans analyse, où l'exploitation des données est faite à part par l'implémentation d'une interface (Row_translator).

J'aimerais donc restreindre mon template CSV_reader aux classes dérivées de CSV_translator, afin d'appeler la méthode adaptée translate_row() à chaque lecture de ligne. Je tâtonne, et je n'arrive pas à faire taire mon compilateur.

Une idée ? Au fait, je suis au début de la conception, si vous avez une meilleure idée pour faire ce que je veux...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class CSV_reader;
class CSV_reader::Row_translator;
 
template <class Translator : public Row_translator>
class CSV_reader : public CSVFile {
    std::ifstream m_csv;
 
    public:
        class Row_translator {
            public:
                virtual void translate_row(Row const &) = 0;
        };
 
        explicit CSV_reader(std::string path) : m_csv(path.c_str()) {}
 
        void read(std::vector<Translator>&);
};
J'ai essayé de profiter du polymorphisme sans template, mais sans succès :/

Merci d'avance.

Cordialement,

Kidpaddle2