gpt4 book ai didi

c++ - 使用 typedef 声明函数有什么意义?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:56 26 4
gpt4 key购买 nike

我有点困惑为什么我可以使用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() 上面有什么意义?

  • 谁能解释一下我应该对函数使用 typedef 的场景?

最佳答案

首先,这个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

关于c++ - 使用 typedef 声明函数有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55696848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com