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
  • 555,201
  • 31
  • 458
  • 770
drjackool
  • 483
  • 1
  • 4
  • 9

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
  • 204,454
  • 14
  • 159
  • 270
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
  • 85,011
  • 4
  • 57
  • 81