我有以下(简化的)架构:

客户端->保镖->服务器

客户端将命令发送到服务器。 “保镖”对客户端发出的命令进行完整性检查和其他检查,并防止错误的命令到达服务器。例如,保镖可能具有以下代码:

bool Bouncer::someCommand(const someCommandArg& arg) {
    if (arg.x < 100) {
        return false;
    }

    if (arg.y > 10) {
        return false;
    }
    // more checks ...

        return server->someCommand(arg);
}

这种方法的问题在于,必须将保镖条件一一硬编码,并且不够灵活。我正在寻找一种在一些配置文件中定义这些条件的方法,当创建该弹跳器时,该文件将被加载,并循环遍历所有
调用someCommand的条件。此外,测试循环本身必须快速。

如果是C#,我想我会使用它的即时编译功能,并在配置文件中以纯代码编写我的if子句。您对C++有什么建议?

最佳答案

选择包括:

  • 创建一个解释性环境,向其传达传入消息的可测试方面,并从配置中加载一些谓词表达式/函数以进行评估
  • 嵌入语言(例如LUA, ruby )
  • 下载许多更简单的表达评估库
  • 创建您自己的(也许使用Boost Spirit)
  • 让摇床使用dlopen / dlsym等以共享对象(.so,.dll-不论您的操作系统叫什么)的形式加载谓词。
  • 仅谓词/规则需要重新编译
  • 不需要将整个应用程序源分发给想要指定谓词
  • 的用户
  • 非常快速的谓词执行

  • 最佳选择在很大程度上取决于有用谓词的复杂性,性能要求,部署实践等。

    10-04 14:47