gpt4 book ai didi

d - 获取d中的调用对象或方法

转载 作者:行者123 更新时间:2023-12-04 17:10:25 24 4
gpt4 key购买 nike

my previous question here有些相关

有没有办法从 d 中的函数或方法中获取调用对象?

例子:

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();
}
}

问题:
  • 做类似 whoCalledMe 的事情存在?如果是这样,它叫什么?
  • 如果确实存在某些东西,是否可以在编译时(在模板中)使用它,如果存在,如何使用?

  • 或者;
  • 是否可以在运行时访问调用堆栈?就像 php 的 debug_backtrace ?
  • 最佳答案

    扩展什么 CyberShadow said ,因为您可以使用 __FUNCTION__ 获得函数的完全限定名称,您还可以使用 mixin 将函数作为符号获取:

    import std.stdio;
    import std.typetuple;

    void callee(string file=__FILE__, int line=__LINE__, string func=__FUNCTION__)()
    {
    alias callerFunc = TypeTuple!(mixin(func))[0];
    static assert(&caller == &callerFunc);

    callerFunc(); // will eventually overflow the stack
    }

    void caller()
    {
    callee();
    }

    void main()
    {
    caller();
    }

    堆栈将在此处溢出,因为这两个函数最终会无限期地递归调用彼此。

    关于d - 获取d中的调用对象或方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18211104/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com