函数返回指针自身?

时间:2011-06-28 11:07:41

标签: c++

在C ++中是否可以编写一个返回指向自身的指针的函数?

如果不是,请提供一些其他解决方案以使以下语法有效:

some_type f ()
{
    static int cnt = 1;
    std::cout << cnt++ << std::endl;
}
int main ()
{
    f()()()...(); // n calls
}

这必须打印从1到n的所有数字。

4 个答案:

答案 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

Here is the demo.

答案 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