1

声明指向函数的指针的一般形式是什么,比如返回类型 X 并接受输入参数 &Y?

是吗:

X my_function(Y &y){
    //code
}

X (*my_pointer) (Y &y) = my_function;

?

4

3 回答 3

4
X (*fptr)(Y&) = my_function;

或者:

auto fptr = my_function; // c++11

或者:

std::function<X(Y&)> fptr(my_function); // c++11, boost::function if not
于 2013-05-18T18:46:50.577 回答
2

你写的没问题,但如果你只想声明一个该类型的函数指针,通常不写函数参数的名称:

X (*my_pointer) (Y&) = my_function;

根据您的口味,您可能想要更多 C++11-ish 并编写:

#include <type_traits>

std::add_pointer<X(Y&)>::type my_pointer = my_function;

使用模板别名可以使其更具可读性:

#include <type_traits>

template<typename T>
using AddPointer = typename std::add_pointer<T>::type;

AddPointer<X(Y&)> my_pointer = my_function;

或者甚至使用auto并忘记明确命名函数类型,正如 hmjd 在他的回答中所建议的那样。如果您以后需要检索类型,您可以执行以下操作:

decltype(my_pointer)
于 2013-05-18T18:47:51.630 回答
0
  • 是吗:

    X my_function(Y &y){
       //code
    }
    
    X (*my_pointer) (Y &y) = my_function;
    

    ?

是的

于 2013-05-18T18:49:07.400 回答