使用模板删除/添加struct成员

时间:2013-11-12 12:11:20

标签: c++ templates struct

如果我有以下结构:

struct data1{
   uint8_t data;
} 

template <class T>
struct packetTXMaintenance{
   uint8_t start_byte;
   uint8_t byte_count;
   uint8_t address;
   T temp_parameter;
   uint8_t command_id;
 };

例如,我可以像这样实例化结构:

packetTXMaintenance<data1> value;   

但是可以在没有template temp_parameter的情况下实例化结构体? (在某些情况下,我想要没有temp_parameter成员的结构,在其他情况下,temp_parameter成员具有不同类型T

1 个答案:

答案 0 :(得分:5)

您可以将void的结构专门化为模板参数,在此实现中,您可以省略该成员:

只需在结构声明后添加:

template <>
struct packetTXMaintenance <void>
{
   uint8_t start_byte;
   uint8_t byte_count;
   uint8_t address;
   uint8_t command_id;
};

所以当你使用packetTXMaintenance <void> variable时,变量将没有成员,这是一个完全不同的实现。

编辑:

如果您希望该成员使用不同类型的T,那么您可以使用不同类型实例化该结构:packetTXMaintenance<int>,在这种情况下temp_parameter将具有类型int