首页 > 解决方案 > 动态生成的函数的部分应用程序作为函数指针传递给结构

问题描述

所以基本上我是一个完整的 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++ 的编码方式。

标签: c++pointerslambdaanonymous-functionstdbind

解决方案


推荐阅读