변하는 축 선택
값 타입만 바뀌는지, 비교 방식이나 저장 정책도 바뀌는지 분리한다.
Stack<int>와 Stack<string>은 같은 틀에서 나왔지만 다른 타입이다. 멤버 정의 위치, 타입 별칭, 정책 인자를 함께 설계해야 재사용이 안정된다.
값 타입만 바뀌는지, 비교 방식이나 저장 정책도 바뀌는지 분리한다.
템플릿 멤버 함수 정의는 인스턴스화 시점에 보여야 하므로 보통 헤더에 둔다.
복잡한 템플릿 조합은 using alias로 도메인 이름을 붙여 호출부를 정리한다.
template <typename T, std::size_t N>
class RingBuffer {
public:
bool push(T value);
private:
std::array<T, N> data_{};
};