디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

C++ 초보를 위한 강좌. 7. 템플릿의 기본 문법

codesafer갤로그로 이동합니다. 2016.10.15 01:21:06
조회 1588 추천 7 댓글 7

우리는 함수선언의 문법을

return_type function_name( arguments... )

{

    // to do

}


이렇게 알아 왔다.


function_name 이란 이름의 함수는

괄호 안에 선언된 형식의 인자들을 이용해서 함수 내부에서 세부 조작이 가능하게 해 준다.

( 어떤 동작의 주어, 목적어, 수식어 중 무엇이 올 수도 있다 )



template 문법에서는

기존의 함수 선언에서 반드시 구체화 해야했던 [1. 타입]과 [2. 리터럴 상수]에 대해서도

자리만 잡아 놓고 표현할 수 있다.


유념 해야할 것은, 템플릿 확장 문법에 변수는 사용할 수 없다.

컴파일 타임 ( constant time ) 에 결정되어야 하기 때문이다.

그러니, 왜 템플릿 파라메터로 변수를 못넘김? 하고 울지마라. 바랄걸 바라야지.


이미 다 구체화된 일반 함수와 달리,

템플릿 함수는 실제 사용될 때, 사용된 예를 근거로 컴파일러가 알아서 치환해 준다.


template< 자리만 잡아 둘 인자들 >

return_type function_name( arguments... )

{

   // to do

}


처럼 표현된다.



템플릿 내부에 사용될 [1. 타입]의 경우,


    1. typename

    2. class


    둘 중 하나의 키워드를 사용해 [임의의 타입]임을 알려야 한다. 둘 중 어느걸 써도 무방하다.

    일단 난 줄맞추는걸 좋아해서 짧은걸 선호하게 되다 보니 class 를 쓰겠다.


    template< class R, class T > // R 과 T 는 걍 타입입니다. int 고 double 이고 사용자 정의 구조체건 간에 말이쥬. 란 뜻

    R function_name( T argument1 )

    {

        // to do

    }


    처럼 표현할 수 있다는 이야기.


    위의 경우는 T 라는 타입이 function_name 을 실제 사용할 때 전달해주는 첫 번째 인자에 의해 컴파일러가 추론할 수 있다.

    하지만 리턴 타입으로 쓰인 R을 추론할 수 없기 때문에,


    fuction_name< void >( 0 );


    처럼 사용해 주면,


    void function_name( int argument1 )

    {

        // to do

    } 


    라는 함수를 컴파일러가 자동으로 만들어 준다는 것이다.


    이전 시간에 설명했지만 환기시켜주자면 c++컴파일러는 인자에 의한 다형성을 지원하기 때문에 사실상,


    void function_name_int( int argument1 )

    {

        // to do

    }


    을 만들어준 셈이지.



템플릿 내부에 사용될 [2. 리터럴 상수]의 경우,


    1. null_ptr

    2. 부동소수점 숫자

    3. 리터럴 문자열


    을 제외한 순수 상수 표현을 사용할 수 있다.


    template< int LEVEL > // int 라고 했지만 이것은 리터럴( 말 그대로 ) 상수다.

    void game_start()     // const int a = 변수; 처럼 사용된 임시 고정 상수가 아니란 말.

    {

        // game loop

    }


    처럼 표현될 수 있다는 이야기.


    이경우, 사용할 때 LEVEL 에 해당하는 템플릿 인자를 넘겨 줘야 한다.


    game_start< 5 >();


    처럼 쓰면 된다.



요약하면,

템플릿 함수를 선언하기 위해 ( 템플릿 구조체나 템플릿 클래스도 마찬가지 )

기존의 함수 선언이나 구조체, 클래스 선언 앞에 template< ... > 표현을 넣어주면 된다. 간단!

그리고 템플릿으로 선언된 함수나 클래스를 호출하기 위해 필요한 템플릿 파라메터를 함수명이나 클래스명 뒤에 붙여주면 된다.

function_name< ... >( ... );

처럼 간단!


즉, 템플릿 함수 호출에 있어서

< ... > 는 컴파일 타임에 컴파일러로 하여금 코드 생성에 사용하도록 전달될 인자들,

( ... ) 는 런타임에 전달될 인자들을 의미한다고 해석하면 된다.


그러므로, 우리가 template 문법이 없던 시절


void game_start1()

{

    const int LEVEL = 1;

    ...

}


void game_start2()

{

    const int LEVEL = 2;

    ...

}


void game_start3()

{

    const int LEVEL = 3;

    ...

}


처럼 구현 하던 것을,


template< int LEVEL >

void game_start()

{

    ...

}


하나로 구현할 수 있게 되었고, 사용될때 알아서 game_start1, game_start2 ...

얼마든지 만들어진다. 라고 생각하면 된다는 것!


개편함!


템플릿도 결국 함수의 다형성 처럼 이름이 다른 함수를 자동으로 만들어준다고 생각하면 된다.

function_name< ... > 까지가 이름인것이쥐.

내부적으론 functon_name_types..._constants... 처럼 이름이 만들어진다고 생각하면 되고 말야.

추천 비추천

7

고정닉 0

2

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 며느리, 사위되면 시댁, 처가에 잘할 것 같은 스타 운영자 25/10/13 - -
AD 프로게이머가 될테야!! 운영자 25/10/01 - -
공지 프로그래밍 갤러리 이용 안내 [96] 운영자 20.09.28 47921 65
2896239 요즘 홍어들은 구글쓰는게 국룰인듯 ㅇㅅㅇ 타이밍뒷.통수한방(1.213) 17:09 10 0
2896237 현시대는 토발즈도 1찍 짱깨편인 무서운 시대이다ㅋㅋ번식 더 해줘라 이기 [2] 타이밍뒷.통수한방(1.213) 16:45 16 0
2896236 벽투시기 기술, 조직스토킹 피해는 현실입니다 프갤러(182.218) 16:44 12 0
2896235 지피티랑 그록 성능 왜 갑자기 개박살남 [1] 공기역학갤로그로 이동합니다. 16:33 22 0
2896234 찢두순 노골적인 언론탄압 통제 [1] ♥덩냥이♥갤로그로 이동합니다. 16:31 16 0
2896233 이재명 "계엄 시행됐다면 코리안 킬링필드 열렸다" [2] 발명도둑잡기(118.216) 16:23 21 0
2896232 일본 미소녀 여자아이랑 성관계 아기 만들고 싶음 [1] 류류(125.141) 16:07 16 0
2896231 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥덩냥이♥갤로그로 이동합니다. 15:59 12 0
2896230 ❤✨☀⭐⚡☘⛩나로님 시작합니당⛩☘⚡⭐☀✨❤ Naro갤로그로 이동합니다. 15:55 11 0
2896229 이게 친중극좌 민주당 수준임.. ♥덩냥이♥갤로그로 이동합니다. 15:53 12 0
2896228 코테 준비 다들 어떻게 햇음? 프갤러(210.110) 15:51 14 0
2896227 회사에 비전공자들 있다고 불평하는새끼들 진짜 웃기네 ㅋㅋㅋㅋ [2] ㅇㅇ(220.70) 15:44 21 0
2896226 이런 글 되게 좋지 않니? ㅇㅇ갤로그로 이동합니다. 15:36 23 0
2896225 한국도 캄보디아 킬링필드 일어날뻔했구나... [5] ㅇㅇ(175.197) 15:31 33 0
2896224 가짜뉴스 음모론 극좌 ♥덩냥이♥갤로그로 이동합니다. 15:26 19 0
2896223 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥덩냥이♥갤로그로 이동합니다. 15:13 16 0
2896222 나님은 절대 자ㅅ 하지 않습니당❤+ [2] ♥덩냥이♥갤로그로 이동합니다. 15:12 38 0
2896221 개발자라면 금융권 가지마라 [3] chironpractor갤로그로 이동합니다. 14:43 45 0
2896220 '다케시마·일본해' 중립적 언어라 해명한 구글 [1] 발명도둑잡기(118.216) 14:19 26 0
2896219 여기 또 ㅈ창났노 ㅇㅇ(122.199) 14:17 30 0
2896218 불평등 해소를 위한 진보의 새로운 대안-모두를 위한 소유 ► 세션 2 모 [1] 발명도둑잡기(118.216) 14:01 22 0
2896217 케이스가 플라스틱이나 철 박스인 과자류 뭐있죠 발명도둑잡기(118.216) 13:57 16 0
2896216 예술작품으로 보는 내 위치 발명도둑잡기(39.7) 13:46 24 0
2896215 나님 아디 해킹하지마라 다 모니터링 하고 있다 [4] ♥덩냥이♥갤로그로 이동합니다. 13:33 62 0
2896214 구글코리아 부사장에 조선일보·화이자 출신 영입 [1] 발명도둑잡기(118.216) 13:26 27 0
2896213 반중을 혐한으로 대항하는 친중극좌 민주당 [3] ♥덩냥이♥갤로그로 이동합니다. 13:18 33 0
2896212 틀튜브 중국 망한다더니 [1] 발명도둑잡기(118.216) 13:13 29 0
2896211 이재명 불법대북송금? 비공개 예산 논란 ♥덩냥이♥갤로그로 이동합니다. 13:06 19 0
2896210 [대한민국] 카카오톡과 캄보디아 사건 프갤러(121.172) 13:04 15 0
2896209 김현지,이재명 범죄 대법원 판결문 공개 ♥덩냥이♥갤로그로 이동합니다. 13:03 26 0
2896208 확실히 환절기는 환절기임 ♥덩냥이♥갤로그로 이동합니다. 13:02 25 0
2896207 미술이나 작곡 기술 다 배워도 만들고 싶은게 없어서 프갤러(60.196) 12:58 22 0
2896206 증권사 개발자임 [6] ㅇㅇ(106.101) 12:57 74 0
2896204 이 대통령 "계엄 연루 군 승진대상자, 발각되면 취소하라" [3] 발명도둑잡기(118.216) 12:28 34 0
2896203 좇센이캄보디아평가할수준임??ㅋㅋㅋ 타이밍뒷.통수한방(1.213) 12:20 16 0
2896202 맘터는 ㄹㅇ 돈 받고 먹어줘도 먹을까말까임 ♥덩냥이♥갤로그로 이동합니다. 12:10 23 0
2896201 '캄보디아 사망' 서세원, 미완의 '카지노 대부' 발명도둑잡기(118.216) 12:08 22 0
2896200 누가 나님 냥덩이 만진거야? [2] ♥덩냥이♥갤로그로 이동합니다. 12:08 41 0
2896199 맘터는 ㄹㅇ 믿거 공짜로 줘도 안 머금 [2] ♥덩냥이♥갤로그로 이동합니다. 12:04 54 0
2896198 미국 여행 중 실종된 한국인 여성 3명…“생사불명, 흔적도 없어” 발명도둑잡기(118.216) 12:03 16 0
2896197 [단독] 캄보디아에 1천7백억 지원‥또 '김건희-통일교' 유착 의혹? 발명도둑잡기(118.216) 11:59 13 0
2896195 AGI << 이거 만들수 있는거 맞냐? [5] 루도그담당(58.239) 11:52 47 0
2896194 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥덩냥이♥갤로그로 이동합니다. 11:50 24 0
2896193 캄보디아 범죄단체에 극좌 정부기관 연관 가능성? ♥덩냥이♥갤로그로 이동합니다. 11:47 17 0
2896192 캄보디아 한국인피해 이재명 때문이었다 ♥덩냥이♥갤로그로 이동합니다. 11:41 29 0
2896191 "이명박 전 대통령, 캄보디아 총리 '경제 자문' 그만둬야" 발명도둑잡기(118.216) 11:40 21 0
2896190 [긴급] 김현지 종북간첩 경기동부연합과 연관 폭로 [2] ♥덩냥이♥갤로그로 이동합니다. 11:36 42 0
2896189 근데 솔직히 주식 프로그램<<이거 만든게 존나 운이 좋았음 [30] ㅆㅇㅆ(124.216) 11:33 134 0
2896188 국정농단 비선실세 의혹 김현지 대법원 판결문에 기록된 저급한 욕설 ♥덩냥이♥갤로그로 이동합니다. 11:33 32 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2