什么是用于的函数类型?

时间:2012-11-27 17:48:36

标签: c++ function function-pointers

鉴于以下两个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);
}

因此,功能类型有什么用途?函数指针类型不包括案例,并且更方便吗?

3 个答案:

答案 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