определить оператор void * и оператор bool - PullRequest
5 голосов
/ 28 ноября 2010

Я пытался создать класс с одним operator bool и одним operator void*, но компилятор говорит, что они неоднозначны. Можно ли как-то объяснить компилятору, какой оператор использовать, или я не могу использовать их оба?

class A {
public:
    operator void*(){
        cout << "operator void* is called" << endl;
        return 0;
    }

    operator bool(){
        cout << "operator bool is called" << endl;
        return true;
    }
};

int main()
{
    A a1, a2;
    if (a1 == a2){
        cout << "hello";
    }
} 

Ответы [ 2 ]

8 голосов
/ 28 ноября 2010

Проблема здесь в том, что вы определяете operator bool, но по звукам этого вы хотите operator ==.Кроме того, вы можете явно привести к void * следующим образом:

if ((void *)a1 == (void *)a2) {
    // ...
}

... но это действительно странно.Не делай этого.Вместо этого определите ваш operator == как это внутри class A:

bool operator==(const A& other) const {
    return /* whatever */;
}
4 голосов
/ 28 ноября 2010

Вы можете позвонить оператору напрямую.

int main()
{
    A a1, a2;
    if (static_cast<bool>(a1) == static_cast<bool>(a2)){
        cout << "hello";
    }
} 

В этом случае, однако, похоже, что вы должны определить operator==() и не зависеть от конверсий.

...