gpt4 book ai didi

c++ - 在运行时在结构中处理可变数量的参数

转载 作者:太空宇宙 更新时间:2023-11-04 02:19:14 26 4
gpt4 key购买 nike

我必须使用这些方法来上课,执行者:

  1. 执行者()
  2. 结构执行(字符串s)
  3. Lookup(string name, int module, int num, ...)

和一个解析器:

  1. 解析器()
  2. 结构解析(字符串 s)

Exectuers 的Execute 方法调用Parsers 的Parse 方法。 Parser 然后将字符串分成更小的位(它在 ; 符号上分解字符串)并将结构返回给 Execute 方法。该结构用于调用 Lookup 方法。Parse 返回的结构包含一些标准信息:

  1. 命令名
  2. senderId(用户名、mac 地址和密码)
  3. 可变数量的参数

这就是我的问题。 Lookup 方法采用可变参数,但如何处理结构对这些可变参数的移交?我不是 C 和 C++ 方面的专家。我应该把两个类(class)放在一起吗?因此 Parser 方法可以调用 Execute 方法,从而保留结构。或者也许有一种在运行时解析未知参数变量的方法?通过某种数组?

编辑我不能使用 C++ 中的 STL 库。我只使用 C++ 类和虚拟功能。我正在写一个编译器,其中我限制使用几乎所有的 C 库 + C++ 的神奇技能(虚拟和类)。很抱歉没有马上说出来。

编辑 2我正在将代码写入嵌入式系统,从而使用 avr-gcc 来编译我的代码。这就是我不能使用 STL 的原因。 avr-gcc 不支持这个。

最佳答案

使用 std::vector<> 或可以容纳任意数量条目的模拟容器。

struct {
std::string commandName;
sender_t senderId;
std::vector<arg_t> arguments;
};

编辑:哦,你不能使用 std::vector。在那种情况下:使用数组并存储长度:

struct {
const char* commandName;
sender_t senderId;
int argumentCount;
int maxArgumentCount; // you might not need this
arg_t* arguments; // pointer to array of (at least) argumentCount elements.
};

使用 malloc() 或 new() 为参数创建数组。

我建议将 argumentCount、maxArgumentCount 和参数包装在一个单独的类中,它也可以处理 malloc/new 和 free/delete。这将使防止内存泄漏变得更加容易。

最后,您将编写自己的 vector_of_arg_t 类,因此也许可以查看一些基本的 vector 实现。网上肯定有这方面的教程。

关于c++ - 在运行时在结构中处理可变数量的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3370203/

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