[C++] Template Summary – 1/3

이 문서는 제가 개인적으로 템플릿을 이용해 코딩할때 참고할 만한 자료를 기재해 놓은 것입니다. 템플릿에 대한 전반적인 내용이 아닌 정리라는 점을 염두해 주시길 바랍니다.

먼저 함수 템플릿의 예이다. Type에 상관 없이 두개의 인자를 받아 이 중 최대값을 반환하는 함수 템플릿의 정의.

tpl_decl.h 라는 파일안에 다음과 같은 코드를 정의 한다.

template T max_Tpl(T a, T b)
{
    return (a>b)?a:b;
}

typename 대신에 class를 써도 상관없지만, Type이라는 분명한 의미를 제공한다는 점에서 개인적으로 typename을 선호한다. 이 max_Tpl이라는 템플릿 함수는 헤더파일만…. 존재해야한다는 점이… 늘 걸리긴 했지만, 이제 이런 걸림은 그냥 포기하고 받아 들이기로 했다. 구현을 별도의 cpp 파일로 분리하기 위해 export 라는 예약어가 제공된다고 하나.. Visual C++ 2008에서도 예약어로만 선언되어 있을 뿐 아직 구현되어 지원하지 않는다.

위의 max_Tpl이라는 함수의 활용은 아래와 같다.

#include "tpl_decl.h"

int _tmain(int argc, _TCHAR* argv[])
{
    double max = max_Tpl(100.0, 200.0);

    ...

위의 코드에서 인자가 실수라는 점이 명확하므로 max_Tpl을 간단히 max_Tpl이라고 해도 되나, 템플릿 함수라는 점을 명확하게 하기 위해 을 붙이는 것을 개인적으로 선호한다.

정의한 max_Tpl이라는 함수에 대해 모든 Type에 대해 작동한다고 보장할 수는 없다. 그 하나의 경우로 문자열 타입에 대한 경우인데, 이 경우 문자열 타입에 대해서는 좀더 특별하게 그 구현을 제공해야한다. 그 구현은 마찬가지로 tpl_decl.h 파일에 아래의 코드를 추가한다.

template<> const char* min_Tpl<>(const char* a, const char *b)
{
    return strcmp(a, b)
}

이를 함수 템플릿 특수화라 한다.

Grandma Moses’s Picture

사랑밭새벽편지(http://www.m-letter.or.kr)에서 받은 글귀입니다.

“미국에서 ‘국민 화가’로 불리워지셨던 ‘모지스 할머니'(Grandma Moses 1860~1961)는 놀랍게도 76세 때부터 그림을 그리기 시작해 101세 되던 해 세상과 이별하기 전까지 붓을 놓지 않았습니다.  모지스는 평범한 시골 주부였습니다. 그녀는 작은 농장을 꾸려가며 10명의 자녀를 출산하고 그 중 5명을 잃고 난 후… 그녀는 자수(刺繡)에 푹 빠져 있었습니다. 그러나 72세 때 관절염 때문에 바늘을 들지 못할 지경에 이르렀습니다. 대신 붓을 들었던 것이죠. 우연히 수집가 루이스 칼더가 시골 구멍가게 윈도에 있는 그의 그림을 사 갔고, 이듬해 미술 기획가 오토 칼리어가 그의 그림을 뉴욕의 전시관에 내놓으면서 할머니는 일약 스타가 됩니다. 1949년 해리 트루먼 대통령은 그녀에게 ‘여성 프레스클럽 상’을 선사했고, 1960년 넬슨 록펠러 뉴욕주지사는 그녀의 100번째 생일을 ‘모지스 할머니의 날’로 선포했습니다. 모지스는 시골의 풍경을 그렸으며 그의 화풍은 단순하면서도 밝습니다. 아마 그의 밝은 심성을 반영한 것이 아닐까요?”

그녀의 그림을 한번 감상해 보시죠.