在C ++中是否可以编写一个返回指向自身的指针的函数?
如果不是,请提供一些其他解决方案以使以下语法有效:
some_type f ()
{
static int cnt = 1;
std::cout << cnt++ << std::endl;
}
int main ()
{
f()()()...(); // n calls
}
这必须打印从1到n
的所有数字。
答案 0 :(得分:27)
struct function
{
function operator () ()
{
//do stuff;
return function();
}
};
int main()
{
function f;
f()()()()()();
}
如果需要,您可以选择返回对函数的引用,并返回*this
;
更新: 当然,类型T
的函数在语法上不可能返回T*
或T&
< / p>
的 UPDATE2:强> 的
当然,如果你想要保留你的语法......那就是
some_type f()
{
}
然后这是一个想法
struct functor;
functor f();
struct functor
{
functor operator()()
{
return f();
}
};
functor f()
{
return functor();
}
int main()
{
f()()()()();
}
答案 1 :(得分:8)
不,你不能,因为返回类型必须包含函数的返回类型,这是递归的。你当然可以返回函数对象或类似的东西。
答案 2 :(得分:6)
您可以使用函数对象的模式:
struct f
{
f& operator () ()
{
static int cnt = 1;
cout<<cnt++<<endl;
return *this;
}
};
只需要再添加一个()
。用法:
f()()()(); //prints 1,2,3
答案 3 :(得分:0)
当然有可能,只需查看以下代码:
#include <stdio.h>
typedef void * (*func)();
void * test()
{
printf("this is test\n");
return (void *)&test;
}
int main()
{
(*(func)test())();
}
结果是:
user@linux:~/work/test> gcc test_func.cc -o test
user@linux:~/work/test> ./test
this is test
this is test