How To Organize Template Source Code
템플릿 코드는 헤더 파일에 있어야 한다고 착각하기 쉬운데, 코드 구현을 소스 파일(cpp)에 하면 컴파일(아닌가? 링크였나?) 오류가 나기 때문이다. 그래서 헤더 파일에 구현을 몽땅해놓는 경우가 많은데, 인터페이스를 알고 싶을 뿐일 때는 보기가 짜증난다. 게다가 헤더 파일에 모든 걸 구현하다 보면, 컴파일러가 뒤에 정의된 변수나 메서드를 인식하지 못해서 불평하기도 한다. 단순히 변수나 메서드의 위치를 바꿔주는 것도 한 방법이지만, 상호 참조할 때는 전방 선언이라던가 괴상한 짓을 해야 한다.
각설하고 템플릿 코드도 소스 파일에 구현할 수 있다. 다만 Visual C++를 쓸 때는 GNU C++을 쓸 때보다 불편하긴 하다.
Static virtual functions
가상 정적 함수가 있으면 좋겠다는 생각을 가끔 하는데, 템플릿으로 이를 흉내내는 방법이 있다. 그래도 역시 프로그래밍 언어 차원에서 가상 정적 함수를 지원해주면 좋으련만.
#include <iostream>
using namespace std;
class Foo {
public:
static void bar() { cout << "bar\n"; }
};
template <typename T>
void baz()
{
T::bar();
}
int main()
{
baz<Foo>();
}
My C++ Date Class
Mike Desjardins이 작성한 날짜 라이브러리다. BOOST 라이브러리에도 날짜 기능이 있지만, 그런 무지막지한 라이브러리를 쓰기 부담스러울 때 참고할만 하다.
Ticks로 시간을 다루는 저수준의 방법을 선호하는 개발자가 유독 C++ 세계에 많은 듯 한데, 정말 관두라고 말하고 싶다. 분명히 실수한다. 닷넷이나 자바의 DateTime, TimeSpan 클래스를 흉내내는 것은 결코 어렵지 않다.
Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
템플릿 코드는 말씀대로 cpp, txx처럼 다른 파일에 있어도 잘 돌아갑니다 ㅎㅎ
그런데 가상과 정적은 서로 배치되는 개념이 아닐까요? 가상함수는 객체의 타입이 동적으로 바뀔 수 있음을 뜻하는데 정적 함수의 호출은 말그대로 정적인 시간 (컴파일 타임)에 정해지니까 서로 모순이 되는 듯 합니다.
현재로선 클래스 메서드(인스턴스 멤버로써의 메서드가 아닌)를 선언하려면 정적 메서드를 써야 하니까, 확실히 모순되는 용어이긴 하네요. ㅎㅎ
블로그를 돌아다니다보니 이곳까지 왔네요.
템플릿을 소스파일에 적어도 된다는 표현보다는 헤더와 소스파일은 컴파일러 입장에서는 전혀 차이가 없다고 하는 것이 좀 더 좋아보이는군요. 나머지는 쓰는 사람의 몫이지요. 링킹에 대해 잘 이해하지 못하는 프로그래머가 많은 것이 문제일뿐.
잘 보고 있습니다.
본문에 있는 소스는 어떻게 올리는 거예요?
너무 예쁘게 올리셔서 배울수 있을까요?
RE saxboy: 그렇긴 한데, 막상 컴파일 오류 나면 귀찮으니까 헤더에 몰아넣게 되는 것 같습니다. ^^
RE elfsnuri: 제가 만든 게 아니고, 이 블로그 테마를 만든 사람이 제공한 것인데요. 똑같이 만들고 싶으시면 제 블로그의 CSS 파일을 보시면 됩니다. 그런데 01, 02 등을 전부 이미지 파일로 만든 거라 20줄까지만 지원한다는 게 약점이죠. -_-;;;