如何使用函数作为参数重载 operator<<(如 cout 的 endl)?

How to overload operator<< with a function as parameter (like endl for cout)?

如何使用函数作为参数重载 operator<<,就像 std::endlstd::cout 所做的那样?

在我的项目中,我需要这样做。例如,在下面的代码中:

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

我写的代码如下,但它会导致错误:

在class头文件中:

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

在 class 源文件中:

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);
}

为了使用 foo 超载

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

必须是非成员函数或static成员函数。

非静态成员函数不像常规函数。你的运营商应该这样声明

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

CSampleClass& (CSampleClass::*pf)(CSampleClass&) 是指向(class CSampleClass 的成员函数)的指针。