使用typedef声明函数的意义是什么?

Syf*_*u_H 6 c++ typedef function

我对为什么可以使用typedef声明函数感到有些困惑。这是我的示例:

int Add(int a, int b) {
    return a + b;
}

int Mult(int a, int b) {
    return a * b;
}


typedef int func(int, int);


int main(int argc, char* argv[]){

    func Add;
    cout << Add(5, 57) << endl;

}
Run Code Online (Sandbox Code Playgroud)

func Add;我可以Add()直接致电时,int上面的意思是什么?

  • 有人可以解释我应该在函数上使用typedef的情况吗?

Chr*_*phe 7

首先,这里typedef完全没有用。

但是,如果Add()在另一个编译单元中进行定义,则可能会有意义。这样做的主要好处是可以提供您经常使用的预定义功能签名。然后,您可以在第二个编译单元中使用它在使用它Add()的函数的本地级别(您的示例)或全局级别进行声明。

话虽这么说,一种更现代的表达方式是:

using func = int (int, int);    //instead of typedef 
Run Code Online (Sandbox Code Playgroud)

此功能的一个更有趣的用例是,当您有许多打算互换的功能,并且希望将要使用的功能作为参数传递时:

void test(int a, int b, func f) {
    cout << f(a, b) << endl;
}

int main(int argc, char* argv[]){
    test (5, 57, Add);
    test (18,2,Mult);
    test (15,12, [](int a, int b)->int { return 2*a-b; });
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您喜欢这样做,请考虑使用的替代方法std::function<int(int,int)>:这更强大。它可以允许您将任何类型的可调用对象作为参数传递,例如可调用对象而不是函数:

class X {
    int c; 
public: 
X (int c=0) : c(c) {};
int operator()(int a, int b) { return 2*a+b+c; }    
};

X g(2);  // g is an object of class x, intialised with 2
test (18,2,g);  // does work with function but not with simple typedef
Run Code Online (Sandbox Code Playgroud)