高级功能指针?

时间:2014-03-07 10:21:17

标签: c++

c ++中是否可以使用以下内容?

int do_stuff(int one, int two)
{
    ...
    return ...;
}

int main()
{
    void *ptr = &do_stuff(6, 7);//DON'T CALL THE FUNCTION, just store a pointer

    cout << *ptr;//call the function from the pointer without having to pass the arguments again
}

我知道这可以通过课程完成,但是我可以尝试这样做吗?

2 个答案:

答案 0 :(得分:2)

使用c ++ 11以及来自std :: function和std :: bind的一点魔法你可以。

std::function<int()> f = std::bind(&do_stuff,6,7);
std::cout << f();

答案 1 :(得分:1)

不,不是那样的。代码中没有任何内容

void *ptr = &do_stuff(6, 7);

使它像你想要的那样解析。如果您可以获取返回值的地址,我不确定它是否会解析 at all 。取一个函数的地址基本上是一个无操作,但函数指针不能转换为void *,所以无论如何它都有问题。

你需要更多魔法,比如C ++ 11 lambda closures

我不是C ++ 11程序员,但我想你的代码看起来像是:

int main(void)
{
  auto func = [] () { do_stuff(6, 7); };
  func();
  return 0;
}