简而言之:
如何为我的类定义operator =,使其仅在rhs为0(obj = 0)时编译
但如果rhs为非0值,则会出现编译错误
我知道这是可能的,忘记了。
长:
我有C类。我想允许为这个类的对象赋值obj = 0(这意味着重置对象),但是没有定义任何其他整数或指针的赋值。除了obj = 0之外,没有定义整数或指针的转换。
C obj;
obj = 0; // reset object
在operator=
内,我可以assert(rhs == 0)
,但这还不够好
我知道这是可能的
定义operator=
使得
如果rhs不为0,则会出现编译错误。忘记了详细信息
任何人都可以补充吗?
由于
答案 0 :(得分:7)
使用指向成员的指针:
class foo
{
// Give it a meaningful name so that the error message is nice
struct rhs_must_be_zero {};
// The default operator= will still exist. If you want to
// disable it as well, make it private (and the copy constructor as well
// while we're at it).
foo(const foo&);
void operator=(const foo&);
public:
foo& operator=(int rhs_must_be_zero::*) { return *this; }
};
由于您无法访问foo::rhs_must_be_zero
,因此无法在此类中指定指向成员的指针。您可以命名的成员的唯一指针是空指针,也就是字面零。