endl 의 원리 - 함수 포인터

보물창고·2023년 1월 18일
0

c++ basic 코드누리

목록 보기
41/50

endl의 원리

: std::endl은 함수

결론

: cout의 연산자로 함수포인터 형식이 인자로 있으며,
이를 이용한 것이 endl 함수다! 라는 것을 알고 있자.

동작

  1. 개행을 하고,
  2. 출력 버퍼를 비우는 일을 함.
  3. 참조 반환으로 되어있음..

직접 만들어보면,

  • 이렇게 동작이 가능함. : endl(cout) << "A";
ostream& myenl(ostream& os)
{
	os.pus('\n');
    os.flush();
    return os;
}

int main()
{
	cout << endl << "A";
    endl(cout) << "A";
    
    myendl(cout) << "A";
}

cout << endl의 정체

: 위에서 함수라고 배웠고, 이전 장에서 operator<<() 오버로딩을 배웠는데,
-> 어떻게 표현해야 위와 같은 함수를 만들것인가?

  • 이렇게 하면 되지 않을까?
    cout.operator(myendl)

  • 결론
    : 인자에 함수 포인터를 보내자.

  • 예시 코드
    : 이게 가능하다...

ostream 예상 코드

: 함수 포인터를 인자로 보내주고, 함수 내부에서 인자로 들어오는 함수를 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;
}
  • 이방법을 토대로 tab 함수도 만들어서 /t 함수를 만들어라.
profile
🔥🔥🔥

0개의 댓글