동료가 잘못되었습니다. 일반적인 방법은 항상 .cpp 파일 (또는 원하는 확장자)에 코드를 넣고 헤더에 선언하는 것입니다.
헤더에 코드를 넣는 것이 때로는 장점이 있습니다. 이렇게하면 컴파일러가 더 영리하게 인라인 할 수 있습니다. 그러나 동시에 모든 코드는 컴파일러에 포함될 때마다 처리되어야하므로 컴파일 시간을 파괴 할 수 있습니다.
마지막으로, 모든 코드가 헤더 일 때 순환 객체 관계 (때때로 원하는 경우)를 갖는 것은 성가신 일입니다.
결론은, 당신이 맞았어요. 그는 틀 렸습니다.
편집 : 나는 당신의 질문에 대해 생각하고 있습니다. 그가 말한 것이 사실 인 경우 가 하나 있습니다 . 템플릿. boost와 같은 많은 최신 "현대"라이브러리는 템플릿을 많이 사용하며 종종 "헤더 만"입니다. 그러나 템플릿을 다룰 때 수행 할 수있는 유일한 방법이므로 템플릿을 다룰 때만 수행해야합니다.
편집 : 일부 사람들은 좀 더 설명을 원합니다. 여기에 "헤더 전용"코드 작성에 대한 단점이 있습니다.
주변을 검색하면 부스트를 처리 할 때 컴파일 시간을 줄이는 방법을 찾는 많은 사람들이 있습니다. 예 : Boost Asio를 사용하여 컴파일 시간을 줄이는 방법- 부스트가 포함 된 단일 1K 파일의 14 초 컴파일을 볼 수 있습니다. 14s는 "폭발"하지 않는 것 같지만 확실히 일반적인 것보다 훨씬 길며 매우 빠르게 누적 될 수 있습니다. 큰 프로젝트를 다룰 때. 헤더 전용 라이브러리는 상당히 측정 가능한 방식으로 컴파일 시간에 영향을줍니다. 부스트가 너무 유용하기 때문에 우리는 그것을 용납합니다.
또한 헤더에서만 수행 할 수없는 많은 것들이 있습니다 (부스트조차도 스레드, 파일 시스템 등과 같은 특정 부분에 링크 해야하는 라이브러리가 있습니다). 기본 예는 여러 정의 오류가 발생할 때 헤더 전용 라이브러리에 단일 전역 객체를 가질 수 없다는 것입니다 (단일 인 가증에 의존하지 않는 한). 참고 : C ++ 17의 인라인 변수는 나중에이 특정 예제를 실행할 수있게합니다.
마지막으로, 헤더 전용 코드의 예로 부스트를 사용하면 큰 세부 사항이 종종 누락됩니다.
Boost는 사용자 수준 코드가 아닌 라이브러리입니다. 자주 바뀌지 않습니다. 사용자 코드에서 모든 것을 헤더에 넣으면 작은 변화가있을 때마다 전체 프로젝트를 다시 컴파일해야합니다. 그것은 엄청난 시간 낭비입니다 (그리고 컴파일에서 컴파일로 변경되지 않는 라이브러리의 경우는 아닙니다). 헤더 / 소스와 더 나은 부분을 나눌 때 포워드 선언을 사용하여 포함을 줄이면 하루에 추가 할 때 재 컴파일 시간을 절약 할 수 있습니다.