qualche modo collegato a my previous question herePrendi l'oggetto chiamante o il metodo in d
C'è un modo per ottenere l'oggetto chiamante all'interno di una funzione o di un metodo in d?
esempio:
class Foo
{
public void bar()
{
auto ci = whoCalledMe();
// ci should be something that points me to baz.qux, _if_ baz.qux made the call
}
}
class Baz
{
void qux()
{
auto foo = new Foo();
foo.bar();
}
}
Domande:
- fa qualcosa di simile
whoCalledMe
esiste? e se sì, come si chiama? - se qualcosa esiste, può essere utilizzato in fase di compilazione (in un modello) e se sì, come?
In alternativa;
- è possibile accedere allo stack di chiamata in fase di esecuzione? come con php
debug_backtrace
?
un po 'difficile quando la chiamata può essere effettuata anche da 'main' –
@ratchetfreak: mi manca il punto del tuo commento? ricorda che il codice è lì per spiegare una cosa generale, non per limitare la domanda. – Kris
Non credo sia possibile ottenere ciò che si desidera in qualsiasi linguaggio compilato. Riguardo alla domanda 2: al momento della compilazione ci possono essere più chiamanti di una funzione, è possibile ottenere l'elenco di tutti i chiamanti possibili (e non credo sia possibile in D ora). –