2012-02-06 114 views
4

我一直在使用帶有枚舉參數的模板來爲我的代碼輸出提供專門的方法。使用枚舉來專門化模板

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> 
{ };