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

Tom*_*Tom 5 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;
 };
Run Code Online (Sandbox Code Playgroud)

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

packetTXMaintenance<data1> value;   
Run Code Online (Sandbox Code Playgroud)

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

Rax*_*van 5

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

只需在结构声明后添加:

template <>
struct packetTXMaintenance <void>
{
   uint8_t start_byte;
   uint8_t byte_count;
   uint8_t address;
   uint8_t command_id;
};
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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