Как переопределить оператор bool в классе C ++? - PullRequest
11 голосов
/ 29 апреля 2011

Я определяю класс ReturnValue в C ++, который должен сообщить, был ли метод успешным. Я хочу, чтобы объекты класса оценивались в true в случае успеха и false в случае ошибки. Какой оператор мне нужно переопределить, чтобы контролировать достоверность моего класса?

Ответы [ 4 ]

18 голосов
/ 29 апреля 2011

Простой ответ - operator bool() const, но вы можете захотеть взглянуть на идиома безопасного bool , где вместо преобразования в bool (который, в свою очередь, может быть неявно преобразованв другие целочисленные типы) вы конвертируете в другой тип (указатель на функцию-член частного типа), который не будет принимать эти преобразования.

8 голосов
/ 29 апреля 2011

Ну, вы могли бы перегрузить operator bool():

class ReturnValue
{
    operator bool() const
    {
        return true; // Or false!
    }
};
3 голосов
/ 29 апреля 2011

перегрузите этот оператор:

operator bool();
0 голосов
/ 09 апреля 2019

Лучше использовать ключевое слово явное , иначе оно будет мешать другим перегрузкам, таким как operator +

Вот пример:

class test_string
{
public:
   std::string        p_str;

   explicit operator bool()                  
   { 
     return (p_str.size() ? true : false); 
   }
};

и использование:

test_string s;

printf("%s\n", (s) ? s.p_str.c_str() : "EMPTY");
...