给出类型定义
using ConstHandle = MyEntity const*;
using Handle = MyEntity*;
可以进行以下类型转换:
Handle
→ConstHandle
(隐含)ConstHandle
→Handle
(通过const_cast
明确表示)Handle*
→ConstHandle*
(通过const_cast
明确表示)ConstHandle&
→Handle&
(通过const_cast
明确表示)我可以使用基于ID而不是指针的句柄实现类似的行为吗?
案例1和案例2可以很容易地解决,例如
struct ConstHandle
{
int id;
};
struct Handle
{
operator ConstHandle() const { return { id }; }
int id;
};
Handle const_handle_cast(ConstHandle h) { return { h.id }; }
案例3可以通过从Handle
派生ConstHandle
来解决几乎,即
struct ConstHandle
{
int id;
};
struct Handle : ConstHandle
{
};
此处,几乎指的是,现在,转化Handle*
→ConstHandle*
是隐含的而非显式的。
是否有包含案例4的合法解决方案? 法律特别指的是不暗示的方法违反严格别名规则。