: std::endl은 함수
: cout의 연산자로 함수포인터 형식이 인자로 있으며,
이를 이용한 것이 endl 함수다! 라는 것을 알고 있자.
ostream& myenl(ostream& os)
{
os.pus('\n');
os.flush();
return os;
}
int main()
{
cout << endl << "A";
endl(cout) << "A";
myendl(cout) << "A";
}
: 위에서 함수라고 배웠고, 이전 장에서 operator<<() 오버로딩을 배웠는데,
-> 어떻게 표현해야 위와 같은 함수를 만들것인가?
이렇게 하면 되지 않을까?
cout.operator(myendl)
결론
: 인자에 함수 포인터를 보내자.
예시 코드
: 이게 가능하다...
: 함수 포인터를 인자로 보내주고, 함수 내부에서 인자로 들어오는 함수를 call 하는 방식
으로 만들었음.
class ostream
{
public:
ostream& operator<<(ostream&(*f)(ostream&))
{
f(*this); // endl(cout)
return *this;
}
};
ostream cout;
ostream& endl(ostream& os)
{
os << '\n'; // cout << '\n'
return os;
}