2012-02-06 10 views
4

私は、コードからの出力に特化したメソッドを提供するために、enum引数を持つテンプレートを使用しています。列挙型を使用してテンプレートを特殊化する

template <Device::devEnum d> 
struct sensorOutput; 

template<> 
struct sensorOutput <Device::DEVICE1> 
{ 
    void setData(Objects& objs) 
    { 
     // output specific to DEVICE1 
     // output velocity 
     objs.set(VELOCITY, vel[Device::DEVICE1]); 
     // output position 
     objs.set(POSITION, pos[Device::DEVICE1]); 
    } 
}; 

template <> 
struct sensorOutput <Device::DEVICE2> 
{ 

    void setData() 
    { 
     // output specific to DEVICE2 
     // output altitude 
     objs.set(ALTITUDE, alt[Device::DEVICE2]); 
    } 
}; 

ここで、速度と位置を出力するDEVICE1に似たセンサーを追加します。

複数のスペシャライゼーションを設定する方法はありますか?私は試しました

template <> 
struct sensorOutput <Device::DEVICE1 d> 
struct sensorOutput <Device::DEVICE3 d> 
{ 

    void setData() 
    { 
     // output specific to DEVICE1 and DEVICE3 
     // output velocity 
     objs.set(VELOCITY, vel[d]); 
     // output position 
     objs.set(POSITION, pos[d]); 
    } 
}; 

答えて

3

継承はどうですか?

template<Device::devEnum d> 
struct sensorOutputVeloricyAndPosition 
{ 
    void setData() 
    { 
     // output specific to DEVICE1 and DEVICE3 
     // output velocity 
     objs.set(VELOCITY, vel[d]); 
     // output position 
     objs.set(POSITION, pos[d]); 
    } 
} 


template<> 
struct sensorOutput<Device::DEVICE1> : public sensorOutputVeloricyAndPosition<Device::DEVICE1> 
{ }; 

template<> 
struct sensorOutput<Device::DEVICE3> : public sensorOutputVeloricyAndPosition<Device::DEVICE3> 
{ }; 
関連する問題