【发布时间】:2020-04-01 12:51:54
【问题描述】:
假设我有以下结构
template<typenameT>
class Foo
{
T value;
public:
// some public logic
}
在这一点上我想要的就是能够说出来
Foo<int> A;
然后从A 中获取值,就好像它知道“只是类型 T 的值”一样,并按如下方式使用它
int val1 = A; // must correspond to int val1 = A.value
// and
int& val2 = A; // must return reference of A.value and so on
我真的不想用户设置/获取,因为我会经常编写这样的调用并希望尽可能简化代码。
首先我认为重载 = 可能会有所帮助,但我没有做对。它与赋值运算符相反,例如Foo<int> A; int val = 1; A = val;
编辑:网上肯定已经有答案了,但我在“作业”关键字下找不到它。
【问题讨论】:
-
你问的是user defined conversions吗?
-
你能澄清一下:你为什么不使用
int?你描述的很像一个;)。为什么没有get()方法?为什么不公开value? (请注意,一旦您返回了对调用者的非常量引用,封装就已经被破坏了) -
在大多数情况下,定义隐式转换是一个非常糟糕的主意:您应该非常仔细地考虑是否值得对类型系统进行重大削弱(这会使您的代码更容易出错并且更难维持)。也就是说,在某些情况下这是有道理的。
-
@idclev463035818 我有额外的逻辑来跟踪变量的状态,例如
bool is_set;或变量的调用次数。 “没有得到”,因为我将在代码库中调用这个包装器一千次,并希望保持简单。 -
@user12700880 但是一旦你通过引用返回内部变量,你不会丢失那个跟踪吗?