Nieco pokrewne do my previous question hereUzyskaj obiekt wywołujący lub metody in D
Czy istnieje sposób, aby obiekt wywołujący od wewnątrz funkcji lub metody in D?
przykład:
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();
}
}
Pytania:
- Czy coś
whoCalledMe
istnieje? a jeśli tak, jak to się nazywa? - jeśli coś istnieje, czy można go użyć w czasie kompilacji (w szablonie), a jeśli tak, to w jaki sposób?
Alternatywnie;
- Czy można uzyskać dostęp do stosu wywołań w czasie wykonywania? tak jak z php's
debug_backtrace
?
Trochę ciężko, gdy połączenie można wykonać również z 'głównego' –
@ratchetfreak: brakuje mi punktu Twojego komentarza? pamiętaj, że kod jest po to, aby wyjaśnić ogólną rzecz, a nie aby ograniczyć pytanie. – Kris
Nie sądzę, że można osiągnąć to, co chcesz w dowolnym skompilowanym języku. W odniesieniu do pytania 2: w czasie kompilacji może być wielu wywołujących funkcję, można uzyskać listę wszystkich możliwych wywołujących (i nie sądzę, że jest to możliwe w D teraz). –