将其地址作为参数传递的函数

时间:2014-02-26 08:38:28

标签: c++ c++11

我已经尝试过这个宣言:

using fp_type = void (*)(fp_type);

不出所料,它不起作用。

a.cpp: In function 'int main()':
a.cpp:13:26: error: expected ';' before '(' token                                                                                                                           
   using fp_type = void(*)(fp_type);                                                                                                                                        
                          ^                                                                                                                                                 
a.cpp:13:34: error: expected primary-expression before ')' token                                                                                                            
   using fp_type = void(*)(fp_type);

有解决方法吗?我正在考虑来自虚函数指针类型的reinterpret_cast,但我不确定它是如何符合标准的。我正在调查这个因为我不想在::std::function中捕获lambda,然后递归地使用它。我想将它传递给自己的函数指针。

1 个答案:

答案 0 :(得分:1)

5.2.10 / 6保证您可以reinterpret_cast指向不同类型的函数指针的函数指针,当您将其转换回原始类型时,您将返回原始指针值。

我更喜欢这个:

void foo (struct foo_wrapper&);

struct foo_wrapper {
  void (*pf) (struct foo_wrapper&);
  // add constructor and accessor for convenience
};