안녕하세요 삽잡이입니다.
이번 시간에는 데이터를 보관하고자 MFC에서 사용할 수 있는
동적배열인 CArray에 대해서 알아보려고 합니다.
CArray<> 클래스는 사실, Template 입니다.
즉, Template Class 라고 부르는 것입니다. 클래스의 템플릿이지요...
템플릿의 의미를 바라봤을 때 이는 '클래스를 만들어내는 틀'을 말합니다.
Carray를 살펴보도록 하겠습니다.
다시 말하지만, 이놈은 템플릿입니다.
두 가지의 타입을 받습니다.
이 두 가지 타입을 받는 경우는 크게 두 가지로 나뉩니다. (이런걸 언어유희... 푸하하)
우선 '기본 수치 형식'이라고 하며
int, char 와 같은 기본 자료형을 타입으로 쓸 경우 입니다.
이 때 만약, CArray에 int형 자료를 보관한다고 할 경우에 대해서 예를 들어보겠습니다.
여기서 보관하고자하는 데이터 타입(1)이 바로 CArray의 첫 번째 타입입니다.
그리고 매개변수 타입(2)이 두 번째 타입입니다.
이런 경우 int형을 보관하는 Array로써
'CArray<int, int>' 와 같이 사용하게 됩니다.
매개변수의 list 타입은 일반적인 데이터 타입이 아니라면 const 참조를 사용합니다.
기본 형식이 아니면 데이터가 크고, 복사 시에 비 효율적이기 때문에
const 참조를 사용하는 것이지요...
심심해서 이렇게 쓰는 것이 아닙니다...
위의 예제 코드는
CArray 형을 만들 되 어떤 타입을 보관할지에 대해서
'CData 타입을 보관할 것이고(1), const CData형의 참조(2)를 인수로 받겠다'고 약속한 것입니다.
그렇다면, 이렇게 사용할 수 있겠지요
'CArray<CData, const CData&>'
C++에서는 미묘한 성능차이를 예방하고자
MFC에서 이렇게 나누어 놓은 것입니다.
그렇다면 맨날 복사가 일어나는 곳에서는 어떻게 사용할까요?
'CArray<CData*, CData*>' 이렇게 사용해도 됩니다.
물론 두번째 타입에 const를 붙여도 되지만,
const는 일반 타입의 주소에는 넣을 수 없습니다.
const가 붙으면 read만 가능한 형식입니다.
접근 수준이 고수준... 음... 그러니까
높은 곳에서 낮은 곳으로는 대입이 되지 않기 때문에 넣을 수 없는 것입니다.
안전성을 보장할 수 없기 때문이지요...
따라서 포인터형을 쓸 때에는
'CArray<CData*, CData*>' 이런식으로 사용합니다.
다음 시간에 뵙겠습니다.
이상 삽잡이였습니다.
'삽질의 현장 > - MFC' 카테고리의 다른 글
#006_MFC_Control, Value형 변수 (0) | 2015.10.19 |
---|---|
#005_MFC_Document Template 설명 (0) | 2015.10.19 |
#003_MFC_메모리의 구성 (0) | 2015.10.16 |
#002_MFC_View (기본적인 입출력) (0) | 2015.10.15 |
#001_MFC_Intro (0) | 2015.10.15 |