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 을 구분하여 전달할 수 있다.
피드 구독하기:
댓글 (Atom)
[C++] meta programing
재귀 호출에 관해 template meta programming 을 적용한 예제를 살펴보자. #include using namespace std; int fact(int n){ if(n factorial 연산을 하는 일반적인 재귀 호출 함...
-
Smart Pointer : 포인터처럼 동작하며 자동으로 메모리를 해제하고 안전하게 resource를 관리하도록 돕는 객체 포인터는 소멸자가 호출되지 않아 memory leak이 발생한다. Java, C#같은 VM이 있는 언어는 VM에서 G...
-
Template specialization : class template 을 arguments에 따라서 customizing 하는 기법 먼저 위 예제의 첫 번째 template 선언처럼 일반적인 template 선언은 primary temp...
-
Override : 함수를 Override 할 때 정확한 signature 에 맞춰 override 되는지 컴파일 타임에 확인되도록 하는 키워드 위 예제에서 발생하는 실수들이 문제가 되는 이유는 IDE에서 컴파일하는데 문제가 없기 때문이다...
댓글 없음:
댓글 쓰기