我有一个双端队列,它应该包含结构 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
没有 member m_packet
。我理解为什么它不起作用,但问题是,有没有办法在不编写两个看起来几乎相同的不同类的情况下完成这项工作。
这当然只是班级的一小部分,但它应该能说明我的问题。
我想我不是第一个遇到这样问题的人,但由于我不习惯使用模板,所以我不知道我应该寻找什么。