阅读stackoverflow中的一个问题,我想知道是否可以声明一个带有指向自身的指针的函数。即作出这样的声明foo
,以下是正确的:
foo(foo);
最简单的想法是转换为另一个函数指针(不能转换为void*
,因为它可能更小),所以函数声明如下所示:
void foo(void (*)());
虽然这在 C 中是可以的(并且可以在 C++ 中进行强制转换),但我想知道是否可以在没有如此艰难的“重新解释”强制转换或丢失类型信息的情况下完成。
换句话说,我想要以下声明:
void foo( void (*)( void (*)( void (*) ( ... ))));
但是,当然,无限制的声明是不可能的。天真typedef
也无济于事。
欢迎使用 C++ 模板,即使它们使调用代码 ( foo(foo)
) 看起来不那么简洁,但仍然是有限的。
C 风格的答案显示,如何在不强制转换的情况下删除类型信息,或者其他类似的技巧当然很有趣,但不会被接受。