User define literal
: 사용자 정의 literal operator 를 추가할 수 있다.
예제를 통해서 살펴보자.
premitive type 인 float의 값을 표현할 때 접미사로 f 를 사용할 수 있다.
이와 같이 사용자 정의 class 인 Meter 에도 단위를 직관적으로 표현하도록 literal operator 를 정의할 수 있을까?
Meter classd에서 m operator 를 정의하여 user define literal operator 를 사용할 수 있다.
한 가지 주의할 점은 operator 를 정의할 때 전달 받는 인자의 타입이 정해져 있다는 것이다.
정수 literal 은 unsigned long long, const char* 로 받을 수 있으며,
부동소수점 literal 은 long double, const char* 로,
무자열 literal 은 (const char*, size_t) 로,
문자 literal 은 char 로 받을 수 있다.
하지만 사용상의 문제점은 다른 개발자가 3m 를 3 미터가 아니라 3분으로 인식할 수도 있다는 것이다.
그래서 C++ 표준 위원회에서는 왠만하면 사용자 정의 상수를 정의하지 말것을 recommend 하고 있다.
C++ 표준에서 제공하는 literal operator 의 예를 살펴보자.
s를 붙여줌으로 써 const char* 와 string 을 구분하여 전달할 수 있다.
2015년 9월 17일 목요일
피드 구독하기:
글 (Atom)
[C++] meta programing
재귀 호출에 관해 template meta programming 을 적용한 예제를 살펴보자. #include using namespace std; int fact(int n){ if(n factorial 연산을 하는 일반적인 재귀 호출 함...
-
Template specialization : class template 을 arguments에 따라서 customizing 하는 기법 먼저 위 예제의 첫 번째 template 선언처럼 일반적인 template 선언은 primary temp...
-
Override : 함수를 Override 할 때 정확한 signature 에 맞춰 override 되는지 컴파일 타임에 확인되도록 하는 키워드 위 예제에서 발생하는 실수들이 문제가 되는 이유는 IDE에서 컴파일하는데 문제가 없기 때문이다...
-
Static assert : 컴파일 타임에 assertion 을 할 수 있다. C에서 기존에 사용하던 assert() 는 runtime 에 동작한다. C++11에서는 컴파일 타임에도 assert을 사용하도록 static_assert 를 도입...