본문 바로가기

반응형

C/C++

(66)
[C++] C++ 스타일 타입 캐스팅 들어가며 C 스타일의 타입 캐스팅은 자유도가 높은 대신 서로 캐스팅될 수 없는 타입임에도 불구하고 암시적으로 캐스팅 해버리고, 그 결과 정의 되지 않은 오류가 발생하게 되고 그 책임을 사용자에게 떠넘겨(?) 버린다. 이런 오류를 미연에 방지하고자 C++에는 새로운 스타일의 타입 캐스팅이 도입 되었고 의도된 대로 사용되지 않는 타입 캐스팅에 대해 컴파일 타임 오류 발생 시키도록 하였다. 이번 포스트에서는 새로이 추가된 C++ 스타일 캐스팅에 대해 살펴 보도록 하겠다. C++ 스타일 타입 캐스팅 : static_cast const_cast reinterpret_cast dynamic_cast static_cast static_cast는 상속 트리 내에서의 포인터형 번환만이 가능한 캐스팅 방법이다. 즉, 상속..
msxml 파서 사용하기 MSXML에 관한 VB나 C# 같은 언어의 예제는 많은데 C++의 예제는 별로 없는 것 같아 간단하게 나마 예제 코드를 만들어 봅니다. 코드를 보시기 전에 xml에 대한 기본적인 개념을 익히시고 싶으신 분은 XML 기초를 참조해 주세요. MSXML API를 사용하기 위해서는 COM을 어느정도 알면 상당히 편하겠지만 몰라도 상관은 없습니다. 저도 COM에 관해서는 잘 모르기 때문에 이번 포스트에서 그와 관련된 설명은 건너 뛰기로 하겠습니다. 또한 MSXML 파서 설치 같은 것은 기본적으로 다 되어 있다고 가정하고 시작하도록 하겠습니다. 혹시나 설치나 설정 등에 어려움을 겪으신다면 댓글로 남겨 주세요. 그에 대한 포스팅을 따로 마련 해보도록 하겠습니다. 이 포스트는 MSXML4.0 버젼을 기준으로 작성 되었..
[C++] BTree 구현 완료 Insert split delete merge search 미구현 iterate 잠이 오긴 하지만 잠시 생각 해보자. Btree는 iteration이 상당히 까칠하다. 그럼 list를 추가하면 될듯한데..그럼 키는 트리에 유지하고 값만 리스트에 저장 하면 되겠군. 그런데 문제는 트리가 다시 밸런스를 맞추면서인데..예를 들어 2:2가 들어 오고 3:3이 들어 오고 1:1이 들어 오면 3이야 뒤에 추가 하면 되니 아무런 문제가 없지만 1:1은 2보다 작다는 것을 알 수 있으니까 2의 iterator 앞에 넣어 주면 되겠군. 대충 돌아 갈 수 있을 것 같구먼 erase 소스 코드 : 티스토리 버그인지 모르겠으나 코드 라인 정렬이 계속 깨져 파일을 따로 업로드 한다. #pragma once #prag..
Dependency Walker 2.2 Dependency Walker는 32bit 또는 64bit 윈도우 모듈(dll, exe, ocx, sys..)간의 의존성 트리를 구성해 보여주는 유용한 도구입니다. 각 모듈들에 대한 export 함수들과 필요한 파일, 버젼 등을 보여 줍니다. dll 관련 문제 해결에 특히 도움을 줄 수 있습니다. missing modules invalid modules import/export mismatch circular dipendency mismatched machine type module initailzation failures windows 95, 98, NT, 2000, XP, 2003, Vista, CE 에서 모두 동작 합니다. GUI모드와 콘솔 모드를 지원합니다. http://www.dependenc..
Python embedding 1 - Overview '눈이 올것 같은 날씨군..' 이라고 생각하는 순간 신기하게도 눈이 내리는 군요. 그것도 아주 펑펑... 커플 분들에게는 정말 즐거운 날씨 일것이라는 생각이 듬과 동시에 어쩌면, 올해 크리스마스는 화이트 크리스마스가 될지도 모르겠다는 불길한 느낌이 오는군요. 제 느낌이 어쨌든, 내리는 눈이 너무 이뻐서 사진이라도 찍어 둘까하다가 관뒀습니다. 추억은 어디까지나 추억으로 남아야지, 기록으로 남겨진 추억은 나중에 감정이 사라져 버리고 나면 씁쓸함만이 남더군요. 헛소리를 하는 것을 보니 지병이 다시 도지는가 봅니다. '후천적 연말 크리스마스 우려 증후군'이라고 솔로 기간이 길어지다 보면 이런 병도 생깁니다. 이 글을 읽고 계시는 여러분들도 조심하시기 바랍니다. 언제 저 처럼 되 버릴지 모릅니다.ㅎㅎ 오늘은 파이..
Python embedding 4 - PyErr_Print() 를 파일로 남기기 파이썬 임베딩을 하면서 가장 유용하게 사용되는 함수 중에 하나가 PyErr_Print()라고 하면, 대부분 공감 하시리라 믿습니다. PyErr_Print()를 통해 우리는 파이썬 모듈을 로드하고 실행하는 중에 발생하는 모든 에러들과 예외 들에 대해 성실하고도 친절한 답변을 받게 됩니다. 그런데 가끔은 PyErr_Print()가 보여 주는 메시지들을 보지 못하는 환경에 놓일 때가 있습니다. 예를 들자면 윈도우의 서비스 프로세스나 리눅스의 데몬 프로세스 같은 경우지요. 앞에 말한 두 종류의 프로세스들은 프로세스의 특성상 stdout 이라던지 stderr과 같은 표준 출력을 지원하지 못하도록 막아 버리는 경우가 대부분 입니다. 그리고 우리의 PyErr_Print()함수는 stderr을 통해서 메시지를 보여 주..
[C++] typename 키워드 들어가며 'Modern C++ Design'이라는 책에는 typename이라는 키워드가 종종 등장하곤 합니다. 물론 템플릿 파라메터로써만 사용되었다면 제가 이런 포스팅을 시작할 생각도 안했겠지요. template 와 template 는 템플릿을 조금이라도 다루어 보았다면 모두 다 아실 정도의 수준이니까요. 오늘 제가 이 포스트에서 다루고자 하는 것은 템플릿 파라메터로써의 typename이 아니라, 이것이 타입인지 함수인지 구분이 안가는 모호한 문법 속에서 '이것은 타입이니 함수 처럼 다루지 마세요'라고 말하는 typename을 다뤄 보려고 합니다. 포스트에 설명 되어 있는 내용은 IBM 쪽에 올라온 문서를 기본으로 삼고 있습니다. 혹시나 원문이 궁금하신 분은 [여기]를 참고 하시면 됩니다. typenam..
Python embedding 3 - 캐싱 된 모듈 다시 로드 하기 Python embedding 1 - Overview Python embedding 2 - Calling Python function from C/C++ Appilcation 얼마 전 C++코드에서 파이썬 모듈을 로드해 사용 할 수 있는 임베딩(Embedding)이라는 기술에 대해서 포스팅 한적이 있습니다(http://kukuta.tistory.com/83). 그 때 제가 임베딩을 사용한 목적은 '로직이 변경 되었을 때, 재 컴파일이 필요 없이 동적인 로직의 변경이 가능하도록 한다'였습니다만, 파이썬에서는 모듈이 한번 로드 되면 캐싱 되는 기능을 가지고 있더군요. 모듈이 캐싱되어 있다는 것이 보통의 경우에는 성능향상등 각종 이로운 현상을 만들어 주지만, 이번 제가 하려는 경우에는 그다지 도움이 되지 않더..
CppUnit Cookbook CppUnit Cookbook 리팩토링이라는 책을 읽다가 단위 테스트에 대한 필요성을 느끼고 예전 부터 한번 알아봐야지 하고 마음만 먹던 CppUnit에 대해서 간략한(?)하게 테스트 케이스 작성 방법에 대해서 요약해 보았습니다. 원문은 http://cppunit.sourceforge.net/doc/1.9.11/cppunit_cookbook.html#cppunit_cookbook 에서 확인 하실 수 있습니다. Simple Test Case 코드가 정상적으로 작동하고 있는지를 알아보기 위해서는 다양한 방법이 있습니다. 디버거를 사용하여 코드를 일일이 따라가 보거나, 특정 위치에서 문자를 출력 하도록 하는 것도 간단하고 좋은 방법 중에 하나임에는 분명합니다. 하지만 다소 뒤떨어진 방법임에도 분명하지요. 자동..
STL string을 이용해 텍스트 라인을 단어로 쪼개기 이번 장에서는 STL의 string을 이용해 특정 구분자로 나뉘어 있는 텍스트 한줄을 여러개의 단어들로 쪼개는 함수를 만들어 보도록 하겠습니다. 1 void split(const string& text, string& separators, vector& words) { 2 int n = text.length(); 3 int start, stop; 4 5 start = text.find_first_not_of(separators); 6 while ((start >= 0) && (start n)) 9 stop = n; 10 words.push_back(text..

반응형