SafeInt의 예외처리 두 번째 방법은 기본 예외처리 정책을 컴파일 타임에서 선언하는 것입니다.
앞 글에서 우리가 만든 예외처리 클래스를 사용하기 위해 SafeInt를 정의할 때 예외처리 클래스를 템플릿 파라미터의 인자로 넘겼는데 이번에 소개하는 방법은 이 예외처리 클래스 템플릿 인자를 미리 정의해 놓는 것입니다.
방법은 SafeInt 헤더파일을 선언하기 전에 #define 문으로 _SAFEINT_DEFAULT_ERROR_POLICY에 예외처리에 사용할 클래스를 선언합니다.
// MySafeIntException 이 우리가 정의한 예외처리 클래스입니다.
#define _SAFEINT_DEFAULT_ERROR_POLICY MySafeIntException
#include <safeint.h>
이렇게 #define 문으로 SafeInt에서 사용할 예외처리 클래스를 선언하고 예외처리 클래스를 정의하면 SafeInt를 선언할 때 템플릿 파라미터로 형만 선언하면 이후 SafeInt를 사용하다가 예외가 발생하면 #define에서 선언한 예외처리 클래스를 호출합니다.
#include <iostream>
#define _SAFEINT_DEFAULT_ERROR_POLICY MySafeIntException
#include <safeint.h>
using namespace msl::utilities;
class MySafeIntException : public SafeIntException
{
public:
static void SafeIntOnOverflow()
{
std::cout << "Overflow 발생!!" << std::endl;
}
static void SafeIntOnDivZero()
{
std::cout << "0으로 나누기 발생!!" << std::endl;
}
};
int main()
{
SafeInt<unsigned int> X1(1234567);
SafeInt<unsigned int> X2(1234567);
SafeInt<unsigned int> X3 = X1 * X2;
getchar();
return 0;
}
이전 회에서 소개한 방법과 별 차이 없이 #define 문을 사용한다는 것만 다르니 쉽게 이해했으리라 생각합니다.
이제 SafeInt를 사용할 때는 예외처리를 위해 우리는 3가지 방식을 사용할 수 있습니다,
1. try{} catch{}
2. SafeInt에서 사용할 예외처리 클래스를 정의 후 SafeInt 선언 시에 사용
3. #define 문을 사용하여 SafeInt에서 사용할 기본 예외처리 클래스 선언
SafeInt 라이브러리는 클래스만 있는 것이 아닙니다. 함수로도 지원합니다. SafeInt의 함수 버전은 SafeInt에 대한 마지막 글이 될 다음 포스팅을 통해서 설명하겠습니다.
'Visual C++ 10' 카테고리의 다른 글
ALM for C++ in Microsoft Visual Studio 2010 세션 정리 (VS에서 VC++의 차별은 사라진다!) (2) | 2011.05.23 |
---|---|
[SafeInt] C++에서 안전한 정수 연산을 하자 - 4 (0) | 2011.03.07 |
[SafeInt] C++에서 안전한 정수 연산을 하자 - 2 (0) | 2011.02.22 |
[SafeInt] C++에서 안전한 정수 연산을 하자 - 1 (0) | 2011.02.14 |
VS2010 C++ 프로젝트의 디렉토리 설정 (2) | 2010.08.09 |