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?
4

1 回答 1

1

您可以使用类型转换运算符

所以 Second 需要一个如下形式的成员函数: Second::operator First(); 在 First 中也是如此。这将进行隐式转换,无需类型转换。

于 2013-03-15T06:43:59.530 回答