ostream operator << overloading시 manipulator 비슷한거 구현

0
points

새로 클래스를 하나 만들었습니다. 분수를 나타내는 클래스고 이름은 frac입니다

class frac{
줄줄줄
};

여기서 ostream으로 출력하고 싶습니다. 따라서 함수를 하나 만듭니다

std::ostream& operator<<(std::ostream& os, const frac& f);

이러한 꼴이 되겠죠

근데 문제가 하나 있습니다. 출력할때 사용자가 분수 혹은 계산된 소수 형태로 출력하는것을 고를 수 있게 하고 싶습니다. 표준 ostream의 hex나 oct같은 manipulator들 처럼

frac a(1, 10);
std::cout << frac_mode << a << std::endl;

이러면 a가 분수 모드로 출력되고

std::cout << dec_mode << a << std::endl;

이라고 하면 소수 모드로 출력되게 하고 싶습니다.

hex나 이런 manipulator들은 사실 함수 포인터로 ostream내에 있는 ios_base의 정보를 바꾸어 주는 함수더군요.

생각을 좀 해 보았는데 사용자 수준에서 ios_base를 직접 바꿀수는 없으니 뭔가 다른 방법이 필요 할 것 같습니다.

어찌하면 좋을까요?