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
}
我知道这可以通过课程完成,但是我可以尝试这样做吗?
答案 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;
}