Computer Language/C
-
shared_ptr를 사용해보자!!Computer Language/C 2008. 12. 8. 04:53
shared_ptr를 접근할때 저는 OSG에서 처음 스마트 포인터라는 개념을 접해서 그쪽에 익숙한 상태였습니다. OSG에서 스마트 포인터는 다음과 같이 사용했었습니다. osg::ref_ptr ptr = new T; 저는 이렇게 될 줄알고 shared_ptr를 사용했는데 웬걸?? 바로 에러가 발생하더군요;; 보통 사용할때는 std::tr1::shared_ptr ptr(new T); 이렇게 사용하더라구요. 그런데 저는 list컨테이너의 아이템으로 사용해야 하기에 바로 변수를 정의하면서 생성하는 방법은 패스!! 그래서 shared_ptr class의 정의를 살펴보니 대입연산자는 같은 shared_ptr만 받로록 되어있더군요. 대신 reset()이라는 멤버함수가 있습니다. 이 녀석의 사용법은 두가지입니다. 첫번..
-
TR1(Tecnical Report1) 소개글Computer Language/C 2008. 12. 8. 02:40
원문 복사는 에드센스 이용하는 블로그는 불가!! 라는 방침이랑 링크만 걸어 놓습니다. ^^; (영어원문) http://www.ddj.com/cpp/184406110 (번역문) http://yesarang.tistory.com/56 이제 부스트로 사용하던 기능을 표준화 라이브러리로 사용할수가 있겠군요~(아싸!!) 아참!! Visual Studio 2008 Survice Pack 1부터 정식 지원됩니다. 다른 컴파일러에서의 지원여부는 원문과 해당 컴파일러사 홈페이지에서 확인하세요~^^
-
함수 포인터 인수Computer Language/C 2007. 8. 24. 16:50
함 수 포인터는 함수를 가리키고 있지만 어쨋거나 변수이기 때문에 함수의 인수로 전달될 수 있다. 함수를 함수의 인수로 전달한다는 것이 조금 이상하게 들리겠지만 이렇게 하면 함수 내부에서 어떤 함수롤 호출할 것인지를 호출측에서 지정할 수 있다. 함수 포인터가 아니라면 이것은 불가능하다. 함수 포인터를 인수로 받아들이는 함수의 예는 아주 많은데 대표적으로 퀵 소트 함수인 qsort 함수으 원형을 보자. void qsort(void *base, size_t num, size_t width, int(*compare)(const void*, const void*)); 이 함수는 base 번지에서 부터 width 폭을 가지는 num개의 값을 일정한 기준에 따라 정렬하는데 내부적으로 퀵 소트 알고리즘을 사용한다. 퀵..
-
포인터로 함수 호출하기Computer Language/C 2007. 8. 24. 16:49
그 렇다면 함수 포인터를 사용하는 이유는 무엇일까? 앞 예제의 경우 함수 포인터를 통해 간접적으로 func 함수를 호출했는데 그냥 func(2)를 호출하는 것이 훨씬 더 간단하고 직관적인데 왜 굳이 함수 포인터가 필요한가 말이다. 물론 이유가 있는데 언제나 한 단계를 더 거치면 여러 가지 기법들이 가능해 진다. 함수 포인터는 변수이기 때문에 조건에 따라 언제든지 다른 함수를 가리킬 수 있다. 물론 하나의 함수 포인터가 가리킬 수 있는 함수들의 원형은 모두 일치해야 한다. 함수 포인터를 인수로 사용하면 함수를 다른 함수에게 전달하는 것도 가능해지며 함수 퐁니터 배열이나 구조체를 통해 여러 개의 함수군을 통째로 바꿔치기 할 수 도 있다. 함수 포인터의 가장 쉬운 응용예로 조건에 따라 함수를 바꿔 가며 호출하..
-
함수포인터 타입Computer Language/C 2007. 8. 24. 16:49
함 수포인터 타입도 일종의 고유한 타입이다. 따라서 원형이 다른 함수 포인터끼리는 고다볼 대입할 수 없으며 함수으 인수로도넘길 수 없다. 정수형 포인터 변수(int *) 에 실수형 포인터 변수(double *) 의값을 대입 할 수 없듯이 말이다. 다음 코드를 보자. int (*pf1)(char *);void (*pf2)(double);pf1 = pf2; // 타입이 다르므로 에러 pf1 은 문자형 포인터를 인수로 취하고 정수형을 리턴하는 함수를 가리키는 함수 포인터이며 pf2는 실수를 인수로 취하고 리턴값이 없는 함수를 가리키는 함수 포인터이다. 두 변수가 가리킬 수 있는 함수의 원형이 다르기 때문에 pf2가 가리키는 번지를 pf1이 곧바로 대입 할수 없다. 만약 이것이 가능하다면 pf1로 함수를 호출할..
-
[펌] 함수포인터 정의Computer Language/C 2007. 8. 24. 16:48
출처 : http://blog.naver.com/itsatan 여기서는 함수 포인터에 대해 소개하고 개념적인 활용 방안에 대해서도 연구해 보기로 한다. 포인터라는 것이 원래 C/C++ 으 주제 중 가장 어렵고 난해한데 그중에서도 함수 포인터는 난해 함의 절정에 있다고 평가되는 어려운 주제이다. 처음부터 함수 포인터를 다 이해하기는 어려우므로 부담갖지 말고 가벼운 마음으로 읽어보기 바란다. 다행이 함수 포인터는 실전에서 사용빈도가 그리 높지 않으므로 모른다고 해서 당장 불편한 정도는 아니다. 함수 포인터란 함수를 가리키는 포인터이다. 포인터란 본래 메모리상의 번지를 저장하는 변수인데 함수 메모리에 존재하며 시작 번지가 있으므로 포인터 변수로 가리킬 수 있다. 일반적인 포인터는 변수가 저장되어 있는 번지를 ..
-
[펌] 포인터 캐스팅을 이용한 실제 인터페이스 변경Computer Language/C 2007. 8. 24. 16:44
출처 : 데브피아 제 목 [파샤] 포인터 캐스팅을 이용한 실제 인터페이스 변경 7006 0 whoom@hanmail.net 7006 0 0 작 성 자 문채후(whoom) 첨부 파일 작성시각 2005-01-14 오후 4:06:03 조 회 수 480 글 분 류 VC++ 일반 아래 최재욱님의 글을 보다가 문득 생각이나서 글을 적습니다 포인터 캐스팅을 이용한 인터페이스 변경 기법인데요 처음봤을때 너무 신기했던 거라서 ㅡ_ㅡ;; 다른분들도 신기해 해야할텐데 걱정이 앞섭니다 ^^ typedef struct interface; interface IBase { virtual void Play()=0; virtual void Show()=0; } Interface IObject : IBase { virtual void ..
-
클래스 맴버함수의 함수 포인터Computer Language/C 2007. 8. 24. 16:41
일반적으로 함수 포인터는 void* 로 캐스팅되지 않는다. 이는 type 이나 value 보다는 name 에 instantiation 되기 때문이다. 일반적으로 맴버 함수 포인터는 일반 함수 포인터와 다르다. 일반적으로 콜링컨벤션은 __cdecl, __stdcall, __fastcall 이 있는것으로 알려져 있으나 하나가 더 존재한다. 그것은 바로 __thiscall 맴버 함수 포인터는 특이하게 스코프(::*) 가 들어가 있다. (__thiscall 과 관련있음) 따라서 선언할때 아주 눈게 거슬리게 선언이 된다. (그래서 보통 typedef 로 짧게 만들어 놓고 씀) 문제는 다중 상속일때 발생한다. 단일 상속을 하게 되면 상속받은 클래스의 엔트리 포인트를 상속한 클래스의 엔트리로 변경하는 야매로 맴버함수..