gpt4 book ai didi

c++ - 弄清楚晦涩的指针typedef

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:25:56 26 4
gpt4 key购买 nike

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

请帮帮我!谢谢

最佳答案

这意味着,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);

关于c++ - 弄清楚晦涩的指针typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5114102/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com