如何在C ++中重载赋值运算符的两个方向?

时间:2018-07-13 22:43:32

标签: c++ struct syntax operator-overloading operators

由于对齐原因,我使用了一个奇怪的联合。

我已对其进行了重载,以便可以为其分配一个字符串值。

现在,我希望重载=运算符,以便可以将其分配给字符串值。

union Tag
{
    std::string * path;
    long id;
};
struct TextureID
{
    Tag ID;
    int type;

    TextureID& operator= (std::string str){ ID.path = new std::string(str); type=0; }
    TextureID& operator= (long val){ ID.id = val; type=1; }
};

在这种情况下,我们使运算符超载了

TextureID t = "hello";

这是有效的声明。

如何覆盖=运算符以使其能够执行操作:

string s = t;

1 个答案:

答案 0 :(得分:3)

您可以创建一个转换运算符,将TextureID转换为std::string

operator std::string() const {
    // logic to create a string to return
}

或创建一个显式函数进行转换

std::string to_string() const {
    // logic to create a string to return
}