How do I override the bool operator in a C++ class?

后端 未结 4 1295
遇见更好的自我
遇见更好的自我 2020-12-09 10:31

I\'m defining a ReturnValue class in C++ that needs to report whether a method was successful. I want objects of the class to evaluate to true on s

相关标签:
4条回答
  • 2020-12-09 11:14

    The simple answer is providing operator bool() const, but you might want to look into the safe bool idiom, where instead of converting to bool (which might in turn be implicitly converted to other integral types) you convert to a different type (pointer to a member function of a private type) that will not accept those conversions.

    0 讨论(0)
  • 2020-12-09 11:17

    It's better to use explicit keyword or it will interfere with other overloads like operator+

    Here is an example :

    class test_string
    {
    public:
       std::string        p_str;
    
       explicit operator bool()                  
       { 
         return (p_str.size() ? true : false); 
       }
    };
    

    and the use :

    test_string s;
    
    printf("%s\n", (s) ? s.p_str.c_str() : "EMPTY");
    
    0 讨论(0)
  • 2020-12-09 11:23

    overload this operator:

    operator bool();
    
    0 讨论(0)
  • 2020-12-09 11:25

    Well, you could overload operator bool():

    class ReturnValue
    {
        operator bool() const
        {
            return true; // Or false!
        }
    };
    
    0 讨论(0)
提交回复
热议问题