Có một thành ngữ cho một typedef nghiêm ngặt trong C++, có thể sử dụng các mẫu?Thành ngữ cho typedef nghiêm ngặt trong C++
Cái gì như:
template <class base_type, int N> struct new_type{
base_type p;
explicit new_type(base_type i = base_type()) : p(i) {}
};
typedef new_type<int, __LINE__> x_coordinate;
typedef new_type<int, __LINE__> y_coordinate;
Vì vậy, tôi có thể làm một cái gì đó như thế này một lỗi thời gian biên dịch:
x_coordinate x(5);
y_coordinate y(6);
x = y; // whoops
Các __LINE__
trong đó có vẻ như nó có thể là khó khăn, nhưng tôi không muốn phải tự tạo một tập hợp các hằng số để giữ cho từng loại duy nhất.
Tọa độ không phải là một ứng dụng rất tốt cho việc này. Một sản phẩm của hai tọa độ không phải là một tọa độ, vv Bạn có thể muốn xem Boost.Units thay thế. –
Tôi đã xóa câu trả lời được đề xuất [BOOST_STRONG_TYPEDEF] (http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/strong_typedef.html), bởi vì dường như nó hoạt động với độ phân giải quá tải nhưng không tạo ra biên dịch lỗi về chuyển nhượng chéo. – Angew
Tôi đặt câu hỏi về giá trị của những gì bạn muốn làm. Điều gì sẽ xảy ra khi bạn muốn thực hiện xoay vòng chẳng hạn? 'x = sin (theta) * y + cos (theta) * x' phải hoàn toàn hợp lệ. –