Я компилирую некоторый код на C ++ класса MegaInt, который является классом положительного десятичного типа, который допускает арифметические операции с большими числами.
Я хочу перегрузить оператор bool, чтобы разрешить код, подобный этому:
MegaInt m(45646578676547676);
if(m)
cout << "YaY!" << endl;
Это то, что я сделал:
header:
class MegaInt
{
public:
...
operator bool() const;
};
const MegaInt operator+(const MegaInt & left, const MegaInt & right);
const MegaInt operator*(const MegaInt & left, const MegaInt & right);
реализация:
MegaInt::operator bool() const
{
return *this != 0;
}
const MegaInt operator+(const MegaInt & left, const MegaInt & right)
{
MegaInt ret = left;
ret += right;
return ret;
}
Теперь проблема в том, что я делаю:
MegaInt(3424324234234342) + 5;
Это дает мне эту ошибку:
неоднозначная перегрузка для оператора "оператор +" в операторе + (const MegaInt &, const MegaInt &) примечание: кандидаты: operator + (int, int)|примечание: const MegaInt operator + (const MegaInt &, const MegaInt &) |
Не знаю почему.Как перегруженный bool () заставляет оператора + становиться неоднозначным? 10
Спасибо.
Ну, все дали мне отличные ответы, к сожалению, ни один из них, похоже, не решил мою проблемуполностью.
Оба void * или идиома Safe Bool работают. За исключением одной крошечной проблемы, я надеюсь, что есть обходной путь:
При сравнении с 0, например:
if (aMegaInt == 0)
Компилятор снова выдает неоднозначную ошибку перегрузки.Я понимаю, почему: он не знает, сравниваем ли мы значение false или значение MegaInt со значением 0. Тем не менее, в этом случае я бы хотел привести его к MegaInt (0).Есть ли способ заставить это?
Еще раз спасибо.