Bonjour,

Je souhaite réaliser un wrapper autour de classe diverses.
J'ai un soucis lors de la surcharge de "->".

Je souhaite arriver à ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
    Test t;
    Test *t = new Test();
    t->setName("test value");
    Wrapper<Test> *w = new Wrapper<Test>(t);
    qDebug() << w->getName();
Mais la dernière ligne pose problème : has no member "getName".

La ligne suivante fonctionne bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
qDebug() << w->operator ->()->getName();
Néanmoins, je souhaite avoir un accès normal (->) aux fonctions pour utiliser le wrapper comme si c'était la classe originale.

Est ce une option particulière pour la compilation qui manque?


Voici la classe wrapper:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
template<class T>
class Wrapper {
public:
    Wrapper() : _o(0) {}
    Wrapper(T* o) : _o(o) {}
    ~Wrapper() { if(_o) { delete _o; } }
 
    T& operator* () { return *_o; }
    T* operator-> () { return _o; }
 
protected:
    T *_o;
};
Et la classe Test; tres simple

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <QString> // de Qt
 
class Test
{
public:
    Test();
 
    const QString &getName();
    void setName(const QString &name);
 
protected:
    QString m_name;
};
Merci pour vos éclaircissements.