c++ - 使用 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()
直接调用?
- 有人可以解释我应该在函数上使用 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 - 在 VSCode 中使用 gcov
- keras - 可变长度视频分类的数据准备
- python - 如何仅从 Bigquery Client 中的 insert_rows_from_dataframe 方法中获取错误?
- ansys - Ansys Fluent 网格划分和分析
- java - 错误:在类 ca.ab.bc.framework.FormData 中找不到主要方法
- python - 使用异常子句每隔 x 时间运行一段代码
- mysql - MySQL JSON 函数创建分组数据的问题
- javascript - 为什么我会收到此错误:未捕获的 TypeError:this.createLink is not a function at new Link at
1:9? - ruby - 如何使 Ruby Mocha 模拟只检查一个参数
- php - 如果单击链接,如何将默认的 html / php 登录页面更改为另一个页面