给定两个类 A 和 B 具有相同的数据布局(即只有函数不同,而不是成员),如何使引用类型隐式转换?
struct Storage
{
uint32_t a, b;
};
class First : private Storage
{
int32_t GetA() { return a; }
int32_t GetB() { return b; }
};
class Second : private Storage
{
int64_t GetA() { return a; }
int64_t GetB() { return b; }
};
void FuncF(const First& first);
void FuncS(const Second& second);
// I would like to be able to call like
int main()
{
First f;
Second s;
FuncF(s); // Conversion fails
FuncS(f); // Conversion fails
return 0;
}
我可以将上述方法用于传递复制,如果我使用继承,class First : Second
我可以让转换以一种方式工作。
(注意上面是一个人为的例子,你可以想象 int32_t 和 int64_t 返回类型是可以从 uint32_t 构造的更复杂的类)。
需要明确的是:我对解决方法不感兴趣,我特别希望能够将First
对象绑定到Second
引用,反之亦然,这取决于数据相同的事实。
FuncS(static_cast<Second&>(f)); // This works, is it standard (ie portable)
// and can I define the class so the cast is not necessary?