2013-08-20 124 views
6

Cách xác định loại ID mạnh trong C++ 11? Đó là posible để thực hiện bí danh của các loại nguyên nhưng nhận được cảnh báo từ trình biên dịch khi bạn kết hợp các loại?Cách xác định loại ID mạnh trong C++ 11?

ví dụ:

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

Bạn không thể làm điều này với typedefs. Tạo các loại mới. Có gì đó trong Boost IIRC. –

+0

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

+1

Quan tâm là tính năng mới được đề xuất này cho C++ 1y: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/ 2013/n3515.pdf –

Trả lời

5

Nếu bạn đang sử dụng tăng, hãy thử BOOST_STRONG_TYPEDEF

Ví dụ từ các tài liệu:

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ảm ơn. Tôi nghĩ đó là một giải pháp tuyệt vời. Nhưng tôi đã tìm kiếm nếu với tiêu chuẩn mới C++ 11 nó posible để làm điều đó mà không cần sử dụng macro, hoặc các lớp học đầy đủ. – Zhen