c – 有一个对象的“模拟”,但是对于函数?

c – 有一个对象的“模拟”,但是对于函数?,第1张

概述我已经搜索了引用和一般的网络,但是如果存在,我无法找出. 有没有办法在C中获取当前函数的指针?这是微不足道的,它应该存在. 在完美的世界中,我想要找到一种获取当前函数的std ::函数的方法,但是即使是一个旧的样式指针也可以. 为了澄清为什么可能需要:我正在考虑Lambda函数中的递归或函数中的一般递归,在未来版本中名称更改的潜力很大. 一般你不能.例如,在可以转换为原始函数指针的lambda中, 我已经搜索了引用和一般的网络,但是如果存在,我无法找出.

有没有办法在C中获取当前函数的指针?这是微不足道的,它应该存在.

在完美的世界中,我想要找到一种获取当前函数的std ::函数的方法,但是即使是一个旧的样式指针也可以.

为了澄清为什么可能需要:我正在考虑Lambda函数中的递归或函数中的一般递归,在未来版本中名称更改的潜力很大.

解决方法 一般你不能.例如,在可以转换为原始函数指针的lambda中,没有(标准语言)方法来获取函数内的指针.

但是,您可以通过宏__func__获得作为原始字符串的函数名称,只有编译器的最新版本才能为其提供该宏名称.

另外,如果你可以使用非便携式代码,还有几个针对编译器的内省设施(我只知道他们存在,但是必须Google它们列出它们).

解决问题的新添加部分,如何让函数递归,并且仍然支持简单的名称更改和/或lambdas.

一种方法是使用std ::函数,但是更容易(并且可能更有效)是将递归函数定义为内部实现细节,例如,在命名空间或内部类中:

#include <iostream>using namespace std;voID foo( int const x ){    struct Recursive {        inline static voID foo( int const x )        {            cout << x << ' ';            if( x > 0 ) { foo( x - 1 ); }        }    };    Recursive::foo( x );    cout << endl;}auto main() -> int{    foo( 3 );}

如何用lambda而不是命名函数做上面的 *** 作:

#include <iostream>using namespace std;auto main() -> int{    auto const foo = []( int const x ) -> voID    {        struct Recursive {            inline static voID foo( int const x )            {                cout << x << ' ';                if( x > 0 ) { foo( x - 1 ); }            }        };        Recursive::foo( x );        cout << endl;    };    foo( 3 );}
总结

以上是内存溢出为你收集整理的c – 有一个对象的“模拟”,但是对于函数?全部内容,希望文章能够帮你解决c – 有一个对象的“模拟”,但是对于函数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1232890.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存