gpt4 book ai didi

c++ - 可变大小和类型队列的类结构

转载 作者:行者123 更新时间:2023-11-30 02:00:56 26 4
gpt4 key购买 nike

我更像是一名硬件人员,但我使用的芯片设计工具要求我编写一些 C++ 代码。我不熟悉面向对象的编程;尽管我对 C 语言掌握得很好。我要问的是解释如何构建我的类(称为 cq)以完成手头的任务。

我希望能够生成指定数据类型和指定大小的队列(生成后不应更改)。理想情况下,这将像这样完成......

my_queue = new cq(uint8_t, 6);

...这将生成一个包含六个 8 位无符号整数的数组(或 vector )。

然后,我想要一个方法来将一个元素插入到末尾并返回队列头部的元素,如下所示。

uint8_t front;
front = my_queue.advance(28);

我需要什么样的结构来完成这个?因为数据类型是可变的,所以我需要模板吗?还是我应该有一个泛型类并为每个数据类型创建一个继承其结构的类?

谢谢!

编辑:根据以下答案的输入,我得出以下结论:

template <class type>
template <class size>
class CQ {

private:
// Allocates a queue with type and size
// specified by template arguments.
std::queue<type> cycle_queue(size, 0);

public:
// Inserts input to the end of the queue;
// removes and returns the front element.
type advance(type in){
type out = cycle_queue.front();
cycle_queue.push_back(in);
cycle_queue.pop_front();
return out;
}

}

然后我的问题就变成了……如何在我的主 C++ 程序中实例化它?我试过了,但没有用:

CQ<uint8_t><6> my_queue;
my_queue.advance(28);

再次感谢!

最佳答案

考虑使用 STL 容器,例如 std::vector(此处:http://www.cplusplus.com/reference/vector/vector/)或 std::list(此处:http://www.cplusplus.com/reference/list/list/)。这些集合已经完成了您想要实现的目标,您的类只需实现该集合的访问器即可。

原型(prototype)看起来像这样:

std::vector Variable<uint8_t>;

或者,您需要使用模板。关于它们是什么以及它们如何工作的全面解释可以在这里找到:http://www.cplusplus.com/doc/tutorial/templates/

本质上,您将使用

声明您的对象
cq<uint8_t>(6);

在构造函数中,您将放置:

template <class T>
cq::cq(int amount) {
Buffer = new T[amount];
}

请不要忘记在使用“free”完成后释放内存。

关于c++ - 可变大小和类型队列的类结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14667288/

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