上下文外释义:静态地在几个“相关”结构/类之间实现转换的最佳实践是什么(即没有virtual
)?
上下文:我有几种结构用于访问处理所有权和跨度等的数组。 如果要在继承图中表示它们,我将具有以下内容:
array_view / const (fake pointers)
^
|
array_ref / const
^
|
array
这些结构没有实际的继承关系,因为它们具有完全不同的数据成员。
但在逻辑上转换关系为:
array
可以转换为array_ref
array_ref
可以转换为array_view
array_{ref, view}
可以转换为与其const
对应的货币array
可以转换为array_view
(通过array_ref
)array
可以转换为const_array_view
当前解决方案:转换运算符的实现达到每个人的“父级”(即array
至array_ref
,array_ref
至array_view
)并进行转换添加const
(例如,将array_view
添加到const_array_view
)。
但是随后要将array
传递给期望const_array_view
的函数,则需要两个static_cast
。因为所有这些结构都是模板,所以这使代码冗长且难看,而代码行则炸毁了。
一个简单的蛮力“改进”就是将所有可能的转换实现为隐式转换。但我想知道是否有任何常用的做法使此类转换更容易(阅读:无强制转换)引入过多的维护麻烦或运行时损失。