0

How to overload an operator<< with a function as parameter, like std::endl does for std::cout?

In my project, I need to do this. For example, in the following code:

CSampleClass test;
test << CSampleClass::foo; // foo is function

I write code as following but it causes an error:

In the class header file:

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

In the class source file:

CSampleClass& CSampleClass::foo(CSampleClass& c)
{
    // do some thing
    // for example set a variable in CSample class object
    // c.samevar = 0;
    return *this;
}

CSampleClass& CSampleClass::operator << (CSampleClass& (*pf)(CSampleClass&))
{   
    return *pf(*this);
}
Remy Lebeau
  • 505,946
  • 29
  • 409
  • 696
drjackool
  • 473
  • 1
  • 4
  • 8

2 Answers2

2

In order to use foo with overload

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

it needs to be a non-member function or a static member function.

R Sahu
  • 200,579
  • 13
  • 144
  • 260
2

Non-static member functions are not like regular functions. Your operator should be declared like this

CSampleClass& operator << (CSampleClass& (CSampleClass::*pf)(CSampleClass&));

CSampleClass& (CSampleClass::*pf)(CSampleClass&) is a pointer to a member function (of the class CSampleClass).

john
  • 72,145
  • 4
  • 50
  • 71