본문 바로가기

프로그래밍/C++

How to initialize a constant class array 회사에 Visual C++ Special Interest Group이라는 메일링리스트가 있는데, 흥미있는 주제들이 오가곤 합니다. 그 중의 한 내용이 "How to initialize a constant class array"였는데, 저도 이전서부터 흥미를 가지고 있던 내용이라 참여하게 됐네요. 간단하게 VS 2010에서 아래와 같은 구문이 가능할까 입니다. · Foo() : myArray {1, 2, 3, 4} {} // constructor · array = {1, 2, 3, 4}; 결론적으로 말하면 후자만 됩니다. 전자는 Initialize lists라는 C++0x의 표준입니다. C++0x 도 요새 나오는 웹브라우저와 비슷해서 지원되는 내역이 따로 있더군요. 아쉽게도 아직 지원하지 않는다고 합니다... 더보기
메시지 처리기 요즘의 삽질 #1 글에서의 트랙백입니다. 결국 메시지 처리를 하되 switch~case를 없앨 수 있는 방법을 찾는 거군요. @_@ Ocaml은 안 봐서 모르겠지만.. Ocaml은 어떻게 처리하나요. 저 같은 경우는.. map을 통해서 각각 키와 함수포인터를 연결했지요. 그리고 함수포인터를 찾아가서 실행해주는 함수를 만듭니다. 예를들면 이런겁니다. struct FuncLine { string key; Func* pFunc; }; typedef map FuncMap; FuncMap funcMap; void OnAction(istream& is) {...} void OnState(istream& is) {...} void Handler::Initialize() { funcMap.push_back("actio.. 더보기
My C++ Tips 인클루드 순서 인클루드 순서야 정해진 룰은 없습니다. 그래도 제가 지켜서 쓰는 방식이 있는데요, 바로 미리 컴파일된 헤더에 해당하는 부분을 먼저 인클루드. 하는 겁니다. 즉, 좀 더 구체적이고(비추상적이고) 대중적인(?) 헤더를 먼저 인클루드 하는 거죠. 예를들면.. Win32 Library -> C RunTime Library -> STL Library -> Other Library -> My Library -> My Header 이런 식입니다. (아, 참고로 이 인클루드 순서는 CPP 기준입니다. 미리 컴파일된 헤더는 CPP 기준이니까요.) 무엇이 일반적이고 대중적이냐를 판단하는 가늠은 여러가지이지만.. Win32 Library는 Windows라는 운영체제 API로 OS-Dependant 하므로 제일.. 더보기
STL에 대한 단상 J.Strane님의 포스팅에 대한 답변입니다. 잘 읽었습니다. ^^ 꽤 공감합니다. 저도 스누씨에서 안융기 형과 이런 내용에 대해서 논의를 해봤기 때문에 STL이 가지는 의미를 한 번 되새김질할 수 있었죠. http://www.snucse.org/bbs/bbs_view.asp?id=91489&name=02 에서 그 내용에 대해 다뤄보았습니다. (이 때는 stream에 대한 내용이었습니다만, STL로 번졌습니다.) 전 STL에서 가장 높게 치는 가치는 이것입니다. - C++ 표준에 포함되어있고, 컴파일러 배포시 자동으로 함께 배포됩니다. - STL Algorithm은 자신이 컨테이너에서 행할 내용을 명확히 전달합니다. C++ 표준이기에 많은 사람들이 배우고 알고 있을 가능성이 큽니다. STL은 잘 알고 쓰.. 더보기
C++ 기본 문제 By Choo 얼마나 아시겠나요 ? 후후후. GameHi Myskit 팀의 컴공 99 김연추 씨께서 출제한 문제입니다. 다 알겠으면 당신의 내공을 자랑하셔도 될겁니다. !! =-=-= // (l-value & r-value) & operator & operator overloading //postfix increment operator 와 prefix increent operator 에는 근본적인 차이가 있다. { inti = 0; printf(“%d\n” , i++);//1 i++++;//2 ++++i;//3 }; 1. 1에서의 진행과정을 자세히 설명해보라. i는 printf 가 호출된 이후 증가 하는가 아니면 printf가 호출 되기 전에 증가하는가? 2. l-value 와 r-value 는 무엇인가? 3. 2과 .. 더보기
임시변수의 범위는 어디까지일까요 시작하기 전에 밑의 설명에 다음의 클래스가 항상 정의되어 있다고 가정합니다. int g_i = 0; struct Foo { Foo() : i( ++g_i ) { cout 더보기
ANSI와 UTF-8과의 상호 변환 ANSI에 대해 http://ko.wikipedia.org/wiki/EUC-KR 위의 링크 내용을 요약하면 CP949 = 현대 한글 + EUC-KR EUC_KR = KS X 1001 + KS X 1003 KS X 1001 = 한글 및 한자 모음 KS X 1003 = ASCII + '\(원 문자)' 정도 되겠음다. 유니코드에 대해http://b.mytears.org/2005/01/101 Unicode는 기본적으로 Byte order mark 후에 해당하는 글자들이 나오게됩니다. 즉 UTF-8의 경우( 아래 표 참조 ) EF BB BF EA B0 80 EA B0 80 이렇게 적혀 있으면 가가 라고 보이게 됩니다. 단, UTF-8에 한해서 Byte order mark가 없어도 상관없습니다. Encoding U.. 더보기
스트림에서 스트림으로 전송하기 이 글을 읽기 전에 다음 글들을 읽기를 권장합니다. 한 스트림을 다른 스트림으로 연결하기 스트림에서 이진 파일 다루기 스트림에서 STL 사용하기 이번 글에서는 이전과는 색다르게 문제풀이 방식으로 진행해 보겠습니다. 한 스트림으로부터 다른 스트림으로 내용을 전달하는 방법을 여러가지 소개하는 데에는 역시 예시문이 좋을 것 같아 이렇게 편집해보았습니다. 그럼 질문 스타트 ! 스트림에서 스트림으로의 복사 한 파일이 존재한다고 합시다. 있는 내용을 그대로 복사해서 다른 파일로 복사한다고 해보죠. 어떻게 짜겠습니까 ? void foo() { FILE *pIn = fopen( "in.txt", "rb" ); FILE *pOut = fopen( "out.txt", "wb" ); char buffer[1024] = { .. 더보기
스트림에서 STL 사용하기 이 글을 읽기 전에 다음 글들을 읽기를 권장합니다. 한 스트림을 다른 스트림으로 연결하기 스트림에서 이진 파일 다루기 이번에는 스트림에서 STL을 이용하는 법에 대해서 논해보겠습니다. 원래는 아래 글에 같이 묶으려했으나 글이 길어져 나누어 작성하게 되었군요. 스트림은 상수가 될 수 없다. 간단한 이야기입니다. 스트림은 그 특성상 읽을 떄나 쓸 때나 자신의 형상이 변합니다. 따라서 상수로 정의하면 스트림으로 할 수 있는게 아무 것도 없습니다. 스트림 반복자는 다른 반복자와 달리 컨테이너( 스트림 )의 내용을 바꿉니다. 이는 컨테이너와 스트림을 구분짓는 중요한 요소입니다. 앞으로의 설명에 이 내용을 잘 숙지하시기 바랍니다. 스트림에서 쓸 수 있는 STL 알고리즘은 한정되어 있다. 이 내용은 좀 중요합니다. .. 더보기
스트림에서 이진 파일 다루기 이 글을 읽기 전에 다음 글들을 읽기를 권장합니다. 한 스트림을 다른 스트림으로 연결하기 스트림의 두 가지 용법 스트림은 C의 파일 디스크립터와는 달리 타입에 따른 다른 입력을 제공합니다. 마치 자바에서 스트림으로 객체를 넘기면 toString()함수를 호출해 주듯이, int 형의 정수를 넣으면 자동으로 문자열로 변환하여 넣어주고 클래스와 스트림의 변환(Shift) 연산을 구현해주면 클래스 자체도 스트림으로 넘기고 받을 수 있게 해주죠. 위와 같은 기능을 서식화 입출력 기능( formatted I/O operation )이라고 합니다. 사용자의 타입을 항상 확인한 뒤에 그 타입을 스트림에 걸맞는 타입으로 변환하는 작업을 항상 진행해줍니다. 하지만 가끔은 문자의 그 자체를 이용하고 싶을 때가 있습니다. 예.. 더보기