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完全没有用。
但是,如果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)
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |