2013-03-15 59 views
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? 
+3

您可以將繼承設爲公共,然後將這兩個類型的值綁定到對基的引用。 – 2013-03-15 05:59:25

回答

1

可以使用Type Conversion Operator

那麼第二個將需要形式的成員函數:二::運算優先(); 同樣也在First中。這將會進行隱式轉換而不需要進行類型轉換。