typedef solution_type (*algorithm_ptr_type) (
problem_type problem,
void (*post_evaluation_callback)(void *move, int score)/* = NULL*/
);
请帮帮我!谢谢
答案 0 :(得分:16)
这意味着,algorithm_ptr_type
是指向返回solution_type
的函数的指针,其参数为:
problem_type
的post_evaluation_callback
这又是一个带有两个参数(void*
和int
)并返回void
的函数指针。同样可以写成(简单易读的语法):
typedef void (*callback_type)(void *move, int score);
typedef solution_type (*algorithm_type)(problem_type, callback_type);
注意:参数的名称是可选的,所以我将其删除,以使typedef简短可爱!
在C ++ 11中,可以进一步简化如下:
using algorithm_ptr_type = solution_type (*) (
problem_type,
void(*)(void*, int)
);
这要好得多,因为现在很清楚正在定义什么以及是什么。
在C ++ 11中,您甚至可以定义一个实用程序来创建函数指针,
//first define a utility to make function pointer.
template<typename Return, typename ... Parameters>
using make_fn = Return (*)(Paramaters...);
然后将其用作,
using callback_type = make_fn<void, void*, int>;
using algorithm_type = make_fn<solution_type, problem_type, callback_type>;
这里make_fn
的第一个参数是返回类型,其余的是参数 - 很容易解读每个参数!
<强>用法:强>
solution_type SomeFunction(problem_type problem, callback post_evaluation)
{
//implementation
//call the callback function
post_evaluation(arg1, arg2);
//..
}
algorithm_ptr_type function = SomeFunction;
//call the function
function(arg, someOtherFunction);
答案 1 :(得分:5)
多么可怕的代码!
它的作用是定义一个名为algorithm_ptr_type
的函数指针类型,返回solution_type
并将problem_type
作为其第一个arg,将回调作为其第二个arg。回调将void*
和int
作为其args并且不返回任何内容。
更好的方法是:
typedef void (*post_evaluation_callback)(void *move, int score);
typedef solution_type (*algorithm_ptr_type)(problem_type problem, post_evaluation_callback callback);
答案 2 :(得分:2)
这段令人沮丧的代码使得algorithm_ptr_type
成为函数指针。
此类型必须指向返回类型为solution_type
的对象的函数
此类型必须指向一个带有以下参数的函数:
0:problem_type类型的对象
1:一个函数指针,它必须指向一个函数:
返回无效
采取以下论点:
0:A void*
。
1:int
。
答案 3 :(得分:1)
将solution_type定义为指向带有problem_type和另一个函数指针的函数的函数指针。第二个函数指针将void *(任何东西)和int作为参数。