Tôi muốn tạo loại hỗn hợp ra khỏi hai số enum classes
.Tạo loại hỗn hợp từ hai lớp enum, sẵn sàng cho bản đồ STL
enum class Color {RED, GREEN, BLUE};
enum class Shape {SQUARE, CIRCLE, TRIANGLE};
class Object {
Color color;
Shape shape;
public:
};
Để sử dụng Object
trong một container STL như std::map<>
tôi sẽ cần phải quá tải ít hơn điều hành. Tuy nhiên, để san bằng cả hai lớp enum vào một chỉ số tuyến tính tôi bằng cách nào đó cần số phần tử (Noé) của các lớp enum:
friend bool operator< (const Object &lhs, const Object &rhs) {
return NoE(Shape)*lhs.color+lhs.shape < NoE(Shape)*rhs.color+rhs.shape;
}
Làm thế nào điều này có thể được thực hiện mà không cần nhập các thông tin tương tự (số phần tử) ở hai nơi trong chương trình một cách tốt đẹp? (Cách tốt đẹp nghĩa là không có FIRST_ELEMENT, LAST_ELEMENT
, ma thuật tiền xử lý, v.v.)
Câu hỏi (Number of elements in an enum) tương tự nhưng không địa chỉ enum classes
.
Tôi muốn biết cách tốt nhất để triển khai loại kết hợp này trong C++ 11 là gì. Là định nghĩa lớp enum đủ mạnh, hoặc là nó cần thiết để nói :?
enum class Color {RED=0, GREEN=1, BLUE=2};
enum class Shape {SQUARE=0, CIRCLE=1, TRIANGLE=2};
Theo như tôi biết tình huống 'enum' đã không thay đổi trong C++ 11. – syam
Tại sao bạn cần làm phẳng? Đó không phải là một yêu cầu cho 'std :: map', mà chỉ đơn giản đòi hỏi thứ tự yếu nghiêm ngặt. Bạn có thể dễ dàng làm điều đó với một số so sánh lồng nhau. – Chad
'toán tử <' chỉ được yêu cầu nếu nó là khóa trong 'map', không phải nếu nó là giá trị. Giả sử nó là chìa khóa, tại sao không ưu tiên 'Color' hoặc' Shape' trong bộ so sánh? Nó không kém ý nghĩa hơn so với toán tử 'đã đăng <. – hmjd