2016-07-12 21 views
1

いくつかのフィールドに異なる変数型の構造体を定義したいとします。たとえば、私はこのような構造体定義:動的構造体を定義する

struct sensor { 
    int index; 
    int value; 
}; 

struct sensor2 { 
    int index; 
    float value; 
}; 

を私は2つのオプション、誰かの整数値と他の時間float値が、ユニークな構造でのみ1構造体を宣言します。 私の質問は: 1つの構造体を宣言し、型(intまたはfloatまたは...)のいずれかを選択するためのパラメータを渡すことはありますか? 2.この理由でテンプレートを使用できますか?

struct sensor { 
    int index; 
    type_as_option value; //int or float 
}; 

最高点

+0

'bool is_float; int int_value; float float_value; '? – immibis

+0

'struct'内で匿名の' union'を使うことができます: 'struct sensor {int index; union {int v;フロートt; 'union'はデータメンバーのうちの1つだけを含むことができ、そのメンバーのうち最大のものを格納するのに十分なメモリしか使用しないためです。これにより、テンプレートに頼らずに特定のケースで2つの中から選択することができます。これで十分なら、私はそれを答えに移します。 –

答えて

2

であなたの援助のためにあなたはいくつかのオプションを持っている感謝。あなたは、同じタイプであること2つの構造体をしたい場合、これはあなたが

sensor<int> 

sensor<float> 
として、探しているものではありません、しかし、

template <typename T> 
struct sensor { 
    int index; 
    T value; 
}; 

:あなたはそれをテンプレート作ることができます

は、2種類あります。 (immibisコメントで指摘したように)

2番目のオプションは、単に

struct sensor { 
    int index; 
    int ivalue; 
    float fvalue; 
}; 

の両方で構造体を作ることですが、これは労働組合を使用することによって回避することができ、ほぼ50%のメモリのオーバーヘッドが導入されています

union intOrFloat { 
    int ivalue; 
    float fvalue; 
}; 

struct sensor { 
    int index; 
    intOrFlaot value; 
}; 

ユニオンのフィールドは常に1つだけで、必要以上のメモリを使用しません。

+0

固定長のテンプレートを宣言する方法はありますか?たとえば、変数が浮動小数点型の場合は4バイト長、uint8_tの場合はデータ用に1バイト、空き領域が3バイトに設定されていますか? –

+0

すべての構造体変数を同じメモリサイズに設定したい! –

関連する問題