我们在设计队列的时候,如何巧妙的设计一种通用的数据结构来保存各种不同的元数据?
比如有数据类型A,数据类型B等等。
定义一个Task类
class A {
char buffer[10];
A(const char* p, int len)
{
if(len > sizeof(buffer))
{
len = sizeof(buffer);
}
memcpy(buffer, p, len);
}
};
class B {
string buffer;
B(const char* p, int len)
{
buffer.assign(p,len);
}
};
class Task
{
Type type; //用来保存数据类型
char payload[max_payload_size]; //消息分配空间
Task(Type type, const char* buffer, int len) //A类数据构造
{
new (payload) A(buffer, len);
}
Task(Type type, const char* buffer, int len) //B类数据构造
{
new (payload) B(buffer, len);
}
//获取元数据
template<typename T>
T* Data() const
{
return (T*)payload;
}
};
//通用队列定义
std::queue<Task> queue;