如何使用overload = operator来控制行为,具体取决于左值类型

时间:2014-06-19 13:48:04

标签: c++ operator-overloading

我有一个对象,即使它被智能指针包裹,也应该像一个整数一样无缝地运行。

class MyClass
{
public:
    operator int() const { return 42; }
};

int operator = (int &val, std::shared_ptr<MyClass> mc) { return val = *mc; } // does not compile

void main()
{
    std::shared_ptr<MyClass> mc=std::make_shared<MyClass>();

    int test = *mc; // does compile, but I do not want to write the asterisk
    int test = mc; // does obviously not compile, but I want to have it like that
}

我想摆脱解除引用的星号。有没有办法将int =的类型重载为lvalue?

1 个答案:

答案 0 :(得分:3)

没有办法实现你想要的。您只能重载赋值运算符以分配类,并且只能在类的内部重载。您无法更改将std::shared_ptr分配到int的语义,因为它们都不在您的控制之下。

让我补充说,即使有可能,这样做也是一个坏主意。代码应该做它看起来会做的事情。如果我看到代码将指针分配到int,我肯定期望指针被取消引用以进行赋值。总是尝试编写最小量的惊喜。

一种不同的表达方式是,非常好的代码质量(以及可维护性)度量标准是您在审核期间每分钟获得的&#34; WTF?&#34; s。尽量避免使该指标恶化的代码。