Supposons que l'on me donne une classe A
. Je voudrais envelopper les pointeurs dans une petite classe B
, une sorte de pointeur intelligent, avec la contrainte qu'un B*
est automatiquement converti en A*
de sorte que je n'ai pas besoin de réécrire le code qui utilise déjà A*
.Conversion automatique d'un A * en B *
Je voudrais donc modifier B
afin que les compiles suivants ...
struct A {
void foo() {}
};
template <class K>
struct B {
B(K* k) : _k(k) {}
//operator K*() {return _k;}
//K* operator->() {return _k;}
private:
K* _k;
};
void doSomething(A*) {}
void test() {
A a;
A* pointer_to_a (&a);
B<A> b (pointer_to_a);
//b->foo(); // I don't need those two...
//doSomething(b);
B<A>* pointer_to_b (&b);
// Following represents existing code I don't want to change...
pointer_to_b->foo(); // 'foo' : is not a member of 'B<K>'
doSomething(pointer_to_b); // 'doSomething' : cannot convert parameter 1 from 'B<K> *' to 'A *'
}
Notez que B
héritant de A
n'est pas une option (cas de A
sont créés dans les usines hors de mon contrôle). ..
Est-ce possible?
Merci.
Avez-vous pensé pointeur intelligent existant implémentations, comme 'auto_ptr' ou' shared_ptr'? – Amber
La conversion en 'A *' n'est pas la seule responsabilité que je veux de 'B': elle doit en particulier hériter des autres classes. Et je devrais changer le code actuellement en utilisant 'A *', n'est-ce pas? –
Alors, pourquoi vos opérateurs sont-ils commentés? – AnT