首页 > 解决方案 > 使用 typedef 声明函数有什么意义?

问题描述

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;

}

int 上面有什么意义,func Add;而我可以Add()直接调用?

标签: c++functiontypedef

解决方案


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

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

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

using func = int (int, int);    //instead of typedef 

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

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; });
}

但是,如果您喜欢这样做,请考虑使用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

推荐阅读