c – 有一个对象的“模拟”,但是对于函数?
发布时间:2020-12-16 07:50:59 所属栏目:百科 来源:网络整理
导读:我已经搜索了引用和一般的网络,但是如果存在,我无法找出. 有没有办法在C中获取当前函数的指针?这是微不足道的,它应该存在. 在完美的世界中,我想要找到一种获取当前函数的std ::函数的方法,但是即使是一个旧的样式指针也可以. 为了澄清为什么可能需要:我正
我已经搜索了引用和一般的网络,但是如果存在,我无法找出.
有没有办法在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 ); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |