鉴于以下两个typedef
:
typedef void (*pftype)(int);
typedef void ftype(int);
我理解第一个将pftype
定义为指向一个函数的指针,该函数接受一个int
参数并且不返回任何内容,第二个将ftype
定义为一个函数类型,其中一个{ {1}}参数并且不返回任何内容。但是,我不了解第二个可能用于什么。
我可以创建一个匹配这些类型的函数:
int
然后我可以使用每个函数创建指向此函数的指针:
void thefunc(int arg)
{
cout << "called with " << arg << endl;
}
使用函数类型时,我必须指定我正在创建指针。使用函数指针类型,我没有。两者都可以互换使用作为参数类型:
int main(int argc, char* argv[])
{
pftype pointer_one = thefunc;
ftype *pointer_two = thefunc;
pointer_one(1);
pointer_two(2);
}
因此,功能类型有什么用途?函数指针类型不包括案例,并且更方便吗?
答案 0 :(得分:9)
除了指出的用法(指针的基础类型或函数的引用)之外,函数类型的最常见用法是函数声明:
void f(); // declares a function f, of type void()
哪个人可能想要使用typedef
:
typedef void ft(some, complicated, signature);
ft f;
ft g;
// Although the typedef can't be used for definitions:
void f(some, complicated, signature) {...}
和模板参数:
std::function<void()> fn = f; // uses a function type to specify the signature
答案 1 :(得分:2)
还要考虑这个
template<typename T>
void f(T*);
由于我们希望它接受函数指针,通过模式匹配,T成为函数类型。
答案 2 :(得分:0)
我只想指出,我认为function_t *fptr ...
比funcptr_t fptr...
更清晰。第一种形式表示它必须是指针类型,它比任何东西都更清晰,包括名称funcptr_t
。