我有一個類(Voxel
)與子類可能或可能不具有許多不同的屬性(材料,密度等)與get和set方法。現在,我想要寫一些代碼如下:類型特徵與靜態成員的優點?
template <typename VoxelType>
void process(VoxelType voxel)
{
if(VOXEL_HAS_MATERIAL)
{
//Do some work which involves calling get/setMaterial()
}
if(VOXEL_HAS_DENSITY)
{
//Do some work which involves calling get/setDensity()
}
}
因此,我要像落實VOXEL_HAS_MATERIAL
和VOXEL_HAS_DENSITY
部分。兩個簡單的選項是:
- 靜態
hasMaterial()
和hasDensity()
方法添加到Voxel
類,在派生類中重寫。 - 創建一個類型特徵類
hasMaterial()
和hasDensity()
,並專門爲每個Voxel
子類。
使用方法(2)允許爲原始類型(int等)定義特徵,但在我的情況下這沒有用。在這裏使用類型特徵是否還有其他優點,還是應該採用更簡單的靜態方法?
注意:我也知道基於SFINAE的方法,我將分別考慮。
編輯1:我已更改示例代碼以顯示使用模板。我正在尋找這個問題的靜態而非運行時解決方案。理想情況下,如果編譯器確定它們不能針對給定類型執行,編譯器將能夠去除if語句中的代碼。
「無效過程(體素體素)」 - 你的意思是「SomeVoxelSubclass體素」? – Abyx 2011-12-22 09:29:50
你是什麼意思「在派生類中重寫的靜態方法」? – 2011-12-22 09:30:27
感謝您的評論 - 我實際上使用模板並更新了代碼示例以反映這一點。不想誤導我只是簡化了一些代碼;-) – PolyVox 2011-12-22 10:01:32