Quora의 Why do large C++ projects seems to be comprised of only header files?에 대한 Christopher Susie님의 답변입니다.


라이브러리 프로젝트의 수많은 코드는 템플릿 코드입니다. 템플릿 코드는 대부분이 헤더 파일에 들어가야 합니다. 아래와 같은 정의를 보세요:

template<typename TItemType>
class flat_set
{
  //수많은 코드
};

이 코드는 이것의 모든 함수 정의와 함께 헤더에 있을 것입니다. 왜냐하면 그것은 최종 사용자가 컴파일하기 전까지 인스턴스화되지 않기 때문입니다. 그것은 미리 컴파일될 수 없지만 템플릿들은 보통 그들이 쓰이기 전까지 컴파일되지 않습니다.

매우 평범한 라이브러리(Boost에서 당신은 셀 수 없이 많은 이것을 예제로 봅니다)는 미리 컴파일되지 않을 소수만 남기고 수많은 템플릿 코드를 씁니다. 사실 어지간한 Boost 라이브러리는 헤더 밖에 없습니다.

만약 코드가 나중에 코드가 생성되기 위한 템플릿을 제공하는 대신 뭔가를 한다면 그것은 대개 수많은 소스 파일 (그리고 아마 수많은 헤더 파일들도)을 생성할 것입니다. C++는 본질적으로 범용 라이브러리인 수많은 프로젝트가 있고 스스로 실행 가능하지 않습니다. 이것이 왜 당신이 그렇게 생각했을지의 이유입니다.