我有一个对象,即使它被智能指针包裹,也应该像一个整数一样无缝地运行。
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?
答案 0 :(得分:3)
没有办法实现你想要的。您只能重载赋值运算符以分配类,并且只能在类的内部重载。您无法更改将std::shared_ptr
分配到int
的语义,因为它们都不在您的控制之下。
让我补充说,即使有可能,这样做也是一个坏主意。代码应该做它看起来会做的事情。如果我看到代码将指针分配到int
,我肯定不期望指针被取消引用以进行赋值。总是尝试编写最小量的惊喜。
一种不同的表达方式是,非常好的代码质量(以及可维护性)度量标准是您在审核期间每分钟获得的&#34; WTF?&#34; s。尽量避免使该指标恶化的代码。