2013-08-20 2 views
6

C++ 11에서 강력한 ID 유형을 정의하는 방법은 무엇입니까? 정수형의 별칭을 작성하는 것이 가능하지만 형식을 혼합 할 때 컴파일러에게 경고가 표시됩니까?C++ 11에서 강력한 ID 유형을 정의하는 방법은 무엇입니까?

예컨대 : 개봉 부스트를 사용하는 경우

using monsterID = int; 
using weaponID = int; 

auto dragon = monsterID{1}; 
auto sword = weaponID{1}; 

dragon = sword; // I want a compiler warning here!! 

if(dragon == sword){ // also I want a compiler warning here!! 
    // you should not mix weapons with monsters!!! 
} 
+3

당신은 형식 정의에이 작업을 수행 할 수 없습니다. 새로운 유형을 만드십시오. Boost IIRC에는 뭔가가 있습니다. –

+0

http://stackoverflow.com/q/18251447/560648 –

+1

C++ 1y에서 제안 된 새로운 기능은 다음과 같습니다. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/ 2013/n3515.pdf –

답변

5

, 문서에서 BOOST_STRONG_TYPEDEF

예를보십시오 :

BOOST_STRONG_TYPEDEF(int, a) 
void f(int x); // (1) function to handle simple integers 
void f(a x); // (2) special function to handle integers of type a 
int main(){ 
    int x = 1; 
    a y; 
    y = x;  // other operations permitted as a is converted as necessary 
    f(x);  // chooses (1) 
    f(y);  // chooses (2) 
} 
+0

감사합니다. 나는 이것이 훌륭한 해결책이라고 생각한다. 그러나 새로운 표준 C++ 11로 매크로 나 완전 클래스를 사용하지 않고도 할 수 있는지 찾고있었습니다. – Zhen

관련 문제