Una cosa che vorrei fare in C ++ è chiamare le funzioni non membro con la stessa sintassi che chiamate funzioni membro:
class A { };
void f( A & this ) { /* ... */ }
// ...
A a;
a.f(); // this is the same as f(a);
Ovviamente questo può funzionare solo fino a
-
f
non è virtuale (poiché non può apparire nella tabella virtuale diA
. -
f
non ha bisogno di accedere ai membri non pubblici diA
. -
f
non è in conflitto con una funzione dichiarata inA
(A::f
).
Mi piacerebbe una sintassi del genere perché secondo me sarebbe abbastanza comodo e spingerebbe le buone abitudini:
-
chiamare
str.strip()
sustd::string
(dovestrip
è una funzione definita dall'utente) sembrerebbe molto meglio di chiamarestrip( str );
.
Le classi -
la maggior parte delle volte (sempre?) forniscono alcune funzioni membro che non richiedono di essere membri (cioè: non sono virtuali e non usano membri non pubblici). Questo rompe l'incapsulamento, ma è la cosa più pratica da fare (a causa del punto 1).
La mia domanda qui è: cosa ne pensi di tale funzionalità? Pensi che sarebbe qualcosa di carino, o qualcosa che introdurrebbe più problemi di quelli che mira a risolvere? Potrebbe essere sensato proporre tale caratteristica allo standard successivo (quello dopo C ++ 0x)?
Naturalmente questa è solo una breve descrizione di questa idea; non è completo; probabilmente dovremmo contrassegnare esplicitamente una funzione con una parola chiave speciale per farlo funzionare così e molte altre cose.