quindi ho una serie di funzioni globali, dicono:Come si può creare una funzione "passthru" in C++ usando macro o metaprogrammazione?
foo_f1(int a, int b, char *c);
foo_f2(int a);
foo_f3(char *a);
Voglio fare un C++ wrapper per questi, qualcosa come:
MyFoo::f1(int a, int b, char* c);
MyFoo::f2(int a);
MyFoo::f3(char* a);
ci sono circa 40 funzioni come queste, 35 di loro Voglio solo passare alla funzione globale, gli altri 5 con cui voglio fare qualcosa di diverso.
Idealmente l'attuazione di MyFoo.cpp sarebbe qualcosa di simile:
PASSTHRU(f1, (int a, int b, char *c));
PASSTHRU(f2, (int a));
MyFoo::f3(char *a)
{
//do my own thing here
}
ma sto avendo difficoltà a capire un modo elegante per rendere la macro PASSTHRU sopra.
Quello che ho veramente bisogno è qualcosa di simile alle getArgs X mitici() di seguito:
MyFoo::f1(int a, int b, char *c)
{
X args = getArgs();
args++; //skip past implicit this..
::f1(args); //pass args to global function
}
Ma a corto di cadere in assemblea non riesco a trovare una buona implementazione di getArgs().
Per la maggior parte, questo è impossibile con la versione corrente di C++. Se Google per "l'inoltro perfetto" dovresti ottenere molti successi sul perché ora non funziona, e cosa aggiunge C++ 0x per risolvere il problema. –
Quale scopo è fare della funzione globale un membro di una classe, specialmente quando si tenta di saltare "questo" in ogni caso? – GManNickG