c++ 7

Visual C++ 의 UNREFERENCED_PARAMETER 매크로

MFC에서 GDI+를 사용하다보면 소스에 자동으로 추가되는 DEBUG_NEW 때문에 귀찮아 지죠. operator new와 delete 를 재정의해버려서 컴파일이 안된다거나 실행 중 메모리 오류를 발생시키거든요. 그렇다고 DEBUG_NEW 를 아예 꺼버리기도 굉장히 찜찜하죠. 메모리 관련된 오류를 잡아주는 가장 기본적인 장치니까요. 그래서 GDI+ 개체를 생성하고 지울 때는 좀 번거롭지만 ::new, ::delete 같이 일일이 재정의되지 않은 버전으로 사용하기도 하는데, 그것도 Bitmap::FromHBITMAP 메소드 같이 내부에서 포인터를 생성해서 리턴하는 메소드를 사용할 때는 해결책이 되지 않습니다. GDI+ Bitmap 의 경우에는 FromHBITMAP 메소드와 동일한 역할을 하는 생성자가 있어..

2012.06.13

Visual C++ 에서 STL 컨테이너에 대한 for each, in

오랜만에 C++ 코드를 작성하고 있습니다. C#으로 WPF/Silverlight 만 다루다가 오랜만에 C++로 ATL/COM을 만지려고 하니 사소한 것에서 난관이 많네요. 툴도 바뀌기도 했고 말이죠. 오랜만에 C++을 쓰다보니 새로 알게 되는 지식도 생기는군요. Visual C++ 2010 에서는 STL 컨테이너에 대해서 for each, in 구문을 사용할 수 있다는 걸 알게되었습니다. (MSDN 문서 항목을 보면 2005 버전부터 존재하긴 합니다.) 도입된 목적은 역시 C++/CLI 에서 IEnumerable 등의 형식을 순차적으로 처리할 때 C#의 foreach, in 구문과 동일하게 쓰기 위한 것으로 보입니다. 하지만 C++/CLI가 아닌 win32 프로그래밍에서 STL 컨테이너에 대해서도 사용할..

2012.01.20

Visual Studio 2010 에서 ATL Simple Object 만들 때 ProgID 수동 입력 필요

이전까지의 Visual Studio에서는 ATL Simple Object(ATL 단순 개체)를 만들 때 약식 이름을 넣어주면 모든 필드가 채워졌지만 Visual Studio 2010에서는 그렇지가 않아서 좀 당황스럽네요. 앞으로는 ProgID를 빠뜨리지 않게 신경써야 되겠습니다. Visual Studio 2010에서는 보안상의 이유로 ProgID 를 자동으로 채워주지 않도록 했다고 하는데, 정확히 어떤 보안상의 이유인지는 저도 아직 파악을 못했고, 이러한 변화를 언급하고 있는 웹 페이지를 두 개 정도 찾았을 뿐입니다.MSDN 포럼 글What's New in Visual C++ 2010

2011.01.11

Google Test의 데이터 기반 테스트

Google Test에서도 MBUnit의 RowTest나 NUnit의 TestCase 같은 데이터 기반 테스트라는 개념을 지원한다. Google Test에서는 이 개념을 Value-Parameterized Tests라고 부른다. 코드는 동일한데 사용하는 데이터 값 몇 개만 바뀌는 테스트 케이스가 있을 때, 코드 중복을 없애주면서도 어떤 테스트 케이스가 실패하고 성공하는지 정확하게 알려주는 유용한 기능이다. 그런데 아무래도 C# 보다는 유연성이 떨어지는(?) C++이라 쓰기가 마냥 쉽지만은 않아서 좀 정리를 해 둘 필요가 있다. 템플릿을 써서 구현한 기능이라 컴파일 에러라도 한 번 나면 좀 골치가 아프긴 하지만, Visual C++ 2008의 템플릿 관련 에러 메시지는 엄청나게 친절하기 때문에 미리 걱정할..

2009.05.23

shared_ptr의 custom deleter 사용법

내가 처음 custom deleter를 봤을 때에는, shared_ptr 생성자에서 한 번 custom deleter를 지정해주면 그 다음부터 reset()을 하더라도 항상 처음에 지정했던 deleter를 불러줄 거라는 기대가 있었다. 그래서 테스트를 해봤더니 그런게 아니네. custom deleter를 유지하고 싶다면 reset()을 할 때 deleter도 같이 넘겨줘야 한다. 아래 테스트 코드는 custom deleter를 지정하지 않고 reset()한 경우에는 custom deleter가 호출되지 않는다는 걸 Google Test를 이용해서 보여주는 코드이다. class TestSharedPtrFixture : public testing::Test { public: std::stringstream ..

2009.04.23

Google Test & Visual Studio 2008

google test를 다운받는다.(gtest-1.3.0) 필요한 폴더만 남기고 나머지는 다 지운다. 실제 프로젝트에서 쓸 때에는 include, msvc, src 폴더 외에는 필요없다. msvc 폴더의 파일 중에도, 프로젝트에서 쓸 때에는 gtest.vcproj 파일 외에는 다 필요 없으므로 지워버린다. VS2008로 gtest.vcproj 파일을 열어서 2008 포맷으로 변환해준 후 VS를 닫는다. (닫을 때 sln을 저장할 것인지 물어보는데 저장하지 않음을 선택한다.) 프로젝트를 만든다. 솔루션 폴더에 gtest-1.3.0 폴더를 통채로 옮긴다. 여러 사람이 같이 작업하는 프로젝트에서 구글 테스트 프레임워크를 쓰기에는, 솔루션 폴더에 통채로 포함시키는 편이 공유하기에 편하다. 현재 사용중인 버전을 ..

2009.04.18

VS 2010에서 개선되는 것들

RSS를 둘러보다가 S.Somasegar가 쓴 C++ enhancements in VS2010이라는 블로그 포스트를 보았다. 세상에... 아직 VS 6.0을 쓰고 있는데 2010이라니. 이러다보면 VS 2020이 나올 날도 머지 않았겠다. 한국어판 MSDN에 따르면 S.Somasegar는 MS 개발부서의 총 책임자라고 한다. 사람 이름이... 정말 뭐라고 읽어야 할 지 모르게 생겼다. 이번에는 전체를 번역하기 보다는 원문에서 언급하고 있는 VS2010의 바뀐점에 대해서 간단히 요약만 해보려고 한다. VS2010에서는 아주 큰 코드베이스를 가지고 작업하는 개발자들의 생산성을 높여주고자 한다. 큰 코드베이스를 다룰 때 발생하는 비효율성을 개선하기 위해서 IntelliSense 엔진의 아키텍처를 철저히 조사하..

2008.11.23