Tôi có thể xác định loại để sử dụng làm kiểu liệt kê cơ bản không? Một cái gì đó như thế này:Kiểu tùy chỉnh enum cơ bản
struct S {
S(int i) : value(i) {}
operator int() { return value; }
int value;
};
enum E : S {
A, B, C
};
Thông báo lỗi cho tôi biết rằng S phải là một loại tích phân. Tôi đã cố gắng chuyên std::is_integral
như sau, nhưng có vẻ như trong bối cảnh này, "loại tích phân" thực sự có nghĩa là một trong những loại cơ bản.
namespace std {
template<>
struct is_integral<S> : public true_type {};
}
Vì vậy, sử dụng bất kỳ phiên bản nào của C++, có cách nào để tạo loại tùy chỉnh chuyển thành loại không thể tách rời không?
Vì vậy, "loại tích phân" trong ngữ cảnh này không liên quan gì đến ' std :: is_integral'? – Nelfeal
Ví dụ bạn đã đăng sẽ là phiên bản lật đổ của mục đích 'std :: is_integral'. Tôi không chắc liệu có bất cứ điều gì trong ngôn ngữ để ngăn chặn điều đó không. –
[Có vẻ như chuyên bất cứ điều gì trong '' là hành vi không xác định.] (Https://stackoverflow.com/questions/8513417/what-can-and-cant-i-specialize-in-the-std-namespace). Tôi nên nhìn kỹ hơn. Ngoài ra [this] (https://stackoverflow.com/questions/25345486/why-specializing-a-type-trait-could-result-in-undefined-behaviour) (nhờ HolyBlackCat). –
Nelfeal