Using overloaded operators on pointers

后端 未结 4 878
悲&欢浪女
悲&欢浪女 2021-02-19 15:28

I overloaded the << operator of a class. How do I have to overload the operator if I want to use it on pointers, like the following?

class A {
    std::str         


        
相关标签:
4条回答
  • 2021-02-19 15:36

    Normally there is no good reason doing that, because semantically operator << return reference to stream object. And technically you basically can't do that.

    0 讨论(0)
  • 2021-02-19 15:37

    First off, to stick with standard conventions, your operator<< should be declared like this:

    class A {
        A& operator<<(const std::string&);
    };
    

    Now, technically, you could achiever part of what you want by implementing the following global function:

    A * operator<< ( A * a, const std::string& s ) { (*a) << s; return a; }
    

    This would allow statements such as:

    string s = "this will be printed."; aPointer << s;
    aPointer << string("this will be printed");
    

    However, you won't be able to write the following:

    aPointer << "this will not compile.";
    

    In any case, writing such an operator would be confusing, at best. You should live with the more simple syntax of

    (*aPointer) << "this will be printed.";
    

    and write code that sticks to established conventions to allow others (and yourself, in a few weeks) to read your code.

    0 讨论(0)
  • 2021-02-19 15:39

    You cannot do that. Operator functions are only considered for operands that have enumeration or class types among them.

    You after all shift a pointer, but not a class. You need to explicitly say that you want to shift into a class object by dereferencing the pointer first.

    0 讨论(0)
  • 2021-02-19 15:46

    You need to dereference the pointer first.

    A *ptr = new A();
    (*ptr) << "Something";
    

    The only other way is the way you described above

    Edit: Andre's solution below is workable as well, but like he said it may not be a good idea.

    0 讨论(0)
提交回复
热议问题