int function_a () {
int ret_a = call_a;
int ret_b = call_b;
}
call_a和call_b的定义是这样的:
int call_a() {
// Some 10 lines
call_c();
}
int call_b() {
// Same 10 lines
call_d();
}
函数call_a和call_b之间的区别仅在于它们调用不同的函数。我开始知道函数指针是这种情况下的最佳方法。创建一个函数(只有call_a,而不是call_a和call_b),并将函数指针传递给call_c和call_d。我们怎样才能实现它?
希望我足够清楚,让你明白。
答案 0 :(得分:5)
我们如何实现它?
void call_c();
void call_d();
int call_a(void (*c)()) {
// Some 10 lines
c();
}
int function_a () {
int ret_a = call_a(&call_c);
int ret_b = call_a(&call_d);
}
我开始知道在这种情况下函数指针是最好的方法
有时,事实并非如此。根据您的真实用例,使用lambdas可能更有意义!
template <typename Callable>
int call_a(Callable c) {
// Some 10 lines
c();
}
int function_a () {
int ret_a = call_a([]() { call_c(); });
int ret_b = call_a([]() { call_d(); });
}
答案 1 :(得分:2)
typedef void Subroutine(); //The signature of the function you want to call through pointer
int call_generic(Subroutine *subroutine)
{
//10 lines
soubroutine();
}
它将被称为:
int main()
{
call_generic(&call_c);
//or
call_generic(&call_d);
}