How overload operator with function as parameter like endl in cout

drjackool 956 Reputation points
2021-01-26T16:56:09.587+00:00

How overload operator with function as parameter like endl in cout in c++

I need on my project to do this. for example in following code

CSampleClass test;
test << CSampleClass::foo;

I writes code as following but cause error:

in class header file

CSampleClass& foo(CSampleClass& c);
CSampleClass& operator << (CSampleClass& (*pf)(CSampleClass&));

in class source file

CSampleClass& CSampleClass::foo(CSampleClass& c)
{
    // do some thing
    return *this;
}

CSampleClass& CSampleClass::operator << (CSampleClass& (*pf)(CSampleClass&))
{   
    return *pf(*this);
}

Thanks

Developer technologies C++
0 comments No comments
{count} votes

Accepted answer
  1. Viorel 122.5K Reputation points
    2021-01-26T17:53:04.437+00:00

    This seems to work:

    class CSampleClass
    {
    public:
    
        static CSampleClass& foo( CSampleClass& c )
        {
            // do some thing
            return c;
        }
    
        CSampleClass& operator << ( CSampleClass& ( *pf )( CSampleClass& ) )
        {
            return (*pf)( *this );
        }
    };
    
    . . .
    
    CSampleClass test;
    test << CSampleClass::foo;
    
    0 comments No comments

1 additional answer

Sort by: Most helpful
  1. Petrus 【KIM】 546 Reputation points
    2021-01-27T00:46:51.747+00:00
    class CSampleClass
    {
    
    public:
        static CSampleClass* m_pTHIS;
    
        CSampleClass()
        {
            m_pTHIS = this;
        }
    
        static CSampleClass& foo(CSampleClass& c)
        {
            m_pTHIS = &c;
            return *m_pTHIS;
        }
    
        CSampleClass& operator<< (CSampleClass& (*pf)(CSampleClass&))
        {
            return (*pf)(*m_pTHIS);
        }
    };
    CSampleClass* CSampleClass::m_pTHIS;
    
    int main()
    {
        CSampleClass test;
    
        test << CSampleClass::foo;
        return 0;
    }
    
    0 comments No comments

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.