gpt4 book ai didi

c++ - 类型具体执行和编译

转载 作者:行者123 更新时间:2023-11-28 07:56:11 25 4
gpt4 key购买 nike

我有一个双端队列,它应该包含结构 a 或结构 b。问题是其中一个结构包含一个我必须删除的指针。

#pragma once

#include <iostream>
#include <deque>
#include <typeinfo>

struct packetUpdate {
int recv;
int packetID;
};

struct packet {
int recv;
int packetSize;
char* m_packet;
};

template <class T>
class PacketQueue
{
private:
int m_lastElement;
int m_maxElementReached;
int m_maxElements;

std::deque<T> m_PacketList;

public:
PacketQueue() { m_lastElement = -1; m_maxElements = 0; m_maxElementReached = 0; }
~PacketQueue()
{
if(typeid(T).name() == typeid(packet).name()) {
for(int i = 0; i < m_lastElement+1; i++) {
delete[] m_PacketList[i].m_packet;
}
}

m_PacketList.~deque();
}
};

这行不通。编译器告诉我 packetUpdate 没有成员 m_packet。我明白为什么它不起作用,但问题是,有没有一种方法可以在不编写两个看起来几乎相同的不同类的情况下完成这项工作。

这当然只是该类的一小部分,但它应该可以说明我的问题。

我想我不是第一个遇到此类问题的人,但由于我不太习惯使用模板,所以我不知道应该寻找什么。

最佳答案

这应该可以,但是 m_PacketList.~deque(); 在析构函数中是个坏主意,队列的析构函数无论如何都会被调用,因此你'调用它两次。

关于c++ - 类型具体执行和编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12661529/

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