我有一个类(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