要实现转化链而不重复?

时间:2019-12-20 00:07:59

标签: c++ implicit-conversion

上下文外释义:静态地在几个“相关”结构/类之间实现转换的最佳实践是什么(即没有virtual)?


上下文:我有几种结构用于访问处理所有权和跨度等的数组。 如果要在继承图中表示它们,我将具有以下内容:

    array_view / const (fake pointers)
       ^
       |
    array_ref / const
       ^
       |
     array

这些结构没有实际的继承关系,因为它们具有完全不同的数据成员。

但在逻辑上转换关系为:

  1. array可以转换为array_ref
  2. array_ref可以转换为array_view
  3. array_{ref, view}可以转换为与其const对应的货币
  4. (暗示)array可以转换为array_view(通过array_ref
  5. 例如,
  6. (暗示)array可以转换为const_array_view

当前解决方案:转换运算符的实现达到每个人的“父级”(即arrayarray_refarray_refarray_view)并进行转换添加const(例如,将array_view添加到const_array_view)。

但是随后要将array传递给期望const_array_view的函数,则需要两个static_cast。因为所有这些结构都是模板,所以这使代码冗长且难看,而代码行则炸毁了。

一个简单的蛮力“改进”就是将所有可能的转换实现为隐式转换。但我想知道是否有任何常用的做法使此类转换更容易(阅读:无强制转换)引入过多的维护麻烦或运行时损失。

0 个答案:

没有答案