define assignment operator =只允许零rhs,否则不会编译

时间:2011-07-27 19:14:47

标签: c++

简而言之:
如何为我的类定义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,则会出现编译错误。忘记了详细信息 任何人都可以补充吗?

由于

1 个答案:

答案 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,因此无法在此类中指定指向成员的指针。您可以命名的成员的唯一指针是空指针,也就是字面零。

http://ideone.com/bT02z

演示