如何使用函数作为参数重载 operator<<(如 cout 的 endl)?
How to overload operator<< with a function as parameter (like endl for cout)?
如何使用函数作为参数重载 operator<<
,就像 std::endl
对 std::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 的成员函数)的指针。
如何使用函数作为参数重载 operator<<
,就像 std::endl
对 std::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 的成员函数)的指针。