我有一堂课(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
and VOXEL_HAS_DENSITY
部分。两个简单的选择是:
- 添加静态
hasMaterial()
and hasDensity()
的方法Voxel
类,在派生类中被重写。
- 创建一个类型特征类
hasMaterial()
and hasDensity()
,并专门针对每个Voxel
子类。
使用方法 (2) 允许为原始类型(int 等)定义特征,但这在我的情况下没有用。在这里使用类型特征还有其他优点吗?或者我应该采用更简单的静态方法方法?
Note:我还知道基于 SFINAE 的方法,我将单独考虑这些方法。
Edit1:我更改了示例代码以显示模板的使用。我正在寻找这个问题的静态解决方案而不是运行时解决方案。理想情况下,如果编译器确定无法针对给定类型执行 if 语句中的代码,则能够删除它们。
类型特征很有用,因为即使您无法更改类型本身,也可以轻松地将它们添加到类型中。另外,使用类型特征,您可以简单地提供一个合理的默认值(例如,您可以委托hasMaterial
and hasDensity
到适当的类的静态成员),然后您只需将特征专门化为不使用此默认值的类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)