找出模糊指针typedef

时间:2011-02-25 05:53:31

标签: c++ c

typedef solution_type (*algorithm_ptr_type) (
    problem_type problem,
    void (*post_evaluation_callback)(void *move, int score)/* = NULL*/
);

请帮帮我!谢谢

4 个答案:

答案 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作为参数。