c++ - 动态生成的函数的部分应用程序作为函数指针传递给结构
问题描述
所以基本上我是一个完整的 C++ 初学者,但我必须面对这个复杂的问题。我基本上必须为一个类似于 Witcher 的简单“骰子扑克游戏”设计一些策略。我想出了一个依赖于 4 个参数的策略,我想通过暴力尝试所有这些组合来分析哪种参数组合产生最佳结果。该策略由以下结构表示:
typedef struct SOLUTION
{
const char Name[32];
const char ShortName[8];
void(* Init)();
int(* AI)(int, int, int, int);
}
SOLUTION;
现在,我拥有的是一个“高度”的参数函数:
static int AI_noRiskVar (int a, int b, int c, int d, int opponent_id, int bet, int state, int dice) {
//do some stuff based on parameters a, b, c, d and the rest of parameters (which represent the game actual state)
}
除此之外,我还有一个简单的 API,它使我能够测试任意数量的策略。我所要做的就是将它们放入一个SOLUTION
结构数组中。
我想出了这个计划,它试图利用std::bind function
,它应该能够将我的AI_noRiskVar
函数部分应用于某些参数 a、b、c、d:
SOLUTION Solution[83521]
int kauntr = 0;
for (int a = 3; a < 20; ++a) {
for (int b = 3; b < 20; ++b) {
for (int c = 3; c < 20; ++c) {
for (int d = 3; d < 20; ++d) {
// the identification of which struct contains which strategy is not important now
Solution[kauntr] = (SOLUTION){"fixed length string of 31 chars", "7 chars", NULL, std::bind(&AI_noRiskVar, a, b, c, d)};
}
}
}
}
我想创建一个结构数组,其中每个结构都将这些 a、b、c、d 参数的一个组合部分输入其 AI 函数,即通过其中一个生成的结构测试策略的所有可能配置。问题是,std::bind 不返回完全类型int* (int, int, int, int)
但类型的部分应用函数_Bind(int*(int, int, int, int))
关于如何解决类型问题的任何建议?还是我错过了一些关键的东西?我接触过 C 和几乎所有其他主要的编程语言,但没有接触过 C++,即使是围绕类型的语法,我也感到非常迷茫。
EDIT1:我无法更改定义或声明,struct SOLUTION
因此我需要完全符合上述类型。甚至可能吗?另外,如果您要介绍一些 C++ 特定的库函数或方法,能否请您说明如何在我的问题的上下文中使用它们,这将有助于我理解 C++ 的编码方式。
解决方案
推荐阅读
- java - DBUnit FlatXMLDataSet 对 MySQL 容器化数据库的插入速度极慢
- .net - 如何使用 Windows 服务发送电子邮件
- jhipster - 即使在更新 master.xml 中的更改日志后,liquibase 校验和验证错误仍然存在
- sql-server - 为员工获取不同的角色
- angular - 为什么以反应形式将空字符串设置为 null 变成空字符串
- c# - 将接口作为参数传递给类构造函数
- oracle - 如何识别程序在Oracle中递归执行
- java - 需要帮助在摇摆中制作简单的 MotionBlur/Trail 效果
- r - 将单列中的信息转换为多列
- twitch - 如何获取 JSON 响应 Twitch