5

次の構造がある場合:

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)

4

1 に答える 1

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は type になりintます。

于 2013-11-12T12:15:37.123 に答える