반응형
C++의 템플릿 형태는 크게 두가지로 구분해 보면

template< class T > 형과

template< class T, int element > 형이 있다고 할 수 있습니다.

님께서 말씀하신 것은 후자 형태에서 int element 는 상수 인자를 받을 수 있단 말입니다.

결국

template < class T, int elements=8 >
class List {
.
.
.
.
private
T a[elements]; /////////T 형 배열 8개

이런 식이거나,


template < class T, int elements >
class List {
.
.
.
.
private
T a[elements];

}

이렇게 클래스를 정의해놓고,

main 이나 다른 함수에서

List< char, 20 > lt1;
List< int, 10 > lt2;

이렇게 해주게 되면 element 값에 20과 10이 들어가서 오브젝트 lt1, lt2가 생기겠지요?

이런식으로 사용한다고 보시면 됩니다


//////////////////추가적인 답변 ///////////////////////////////////


추가 질문에 대한 예를 하나 들어보겠습니다.

#include< iostream.h >

template< class T, int sz >

class Bf
{

T a[sz];

public :

Bf() { for ( int i = 0; i < 7;i++) { a[i] = i;} }
~Bf(){}
void printBf() { for ( int i = 0 ; i < 7 ; i++ ) { cout<< a[i] << endl; } }

};

void main()

{

Bf< int, 5 > f1;
f1.printBf();

}


이 경우엔 보시면, 분명 sz는 5입니다. 결국 a[5]인데, 여기 생성자나 printBf 멤버함수를 보시게
되면 a[7]까지 초기화하고 출력하게 되어있습니다. 이 경우엔 컴터가 range를 넘어섰다고 해도 값
들을 대강 알아서 자동할당시켜버립니다. 출력도 0 1 2 3 4 5 6 제대로 나오고요, 하지만 메인에서
Bf< int, 3 >으로 바꿔보십시오. 그렇게 되면 a[3]인데, 그 범위를 넘어서 a[7]까지 컴터가 자동할당
하다 보니 결과값이 엉망으로 나오게 됩니다. 결국, 작은 범위의 차까진 어느 정도 컴터가 메모리를
자동 할당해서 값이 제대로 출력될진 몰라도 오차가 조금이라도 커지면 값은 프로그래머가 의도하는
올바른 출력물을 얻을수가 없게 됩니다. 결국 이런 range 문제는 프로그래머의 역량이 아닌가 싶습
니다. range가 벗어나도 할당엔 하등 문제가 없지만, 언제나 항상 올바른 출력 결과물을 얻는다는
보장은 없다는 것이지요. 제대로 조금 도움이 되었나 모르겠습니다. ^^;
반응형
Posted by Real_G