2
給定兩個具有相同數據佈局的類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?
您可以將繼承設爲公共,然後將這兩個類型的值綁定到對基的引用。 – 2013-03-15 05:59:25