2013-03-16 19 views
5

sử dụng của tôi về lớp enum (VS2012):nhập tĩnh trong C++ 11 (ví dụ một lớp enum)

class matrix { 
public: 
    enum class operation_type {ADD, MULT}; 
    matrix(operation_type op); 
... 
} 

và trong đoạn khác tôi sử dụng

matrix* m = new matrix(matrix::operation_type::ADD); 

Nếu tên dài , điều này trở nên rất lộn xộn.

Có thể bằng cách nào đó nhập các giá trị enum vì vậy mà tôi có thể viết:

matrix* m = new matrix(ADD); 

Các liên quan cùng lớp lồng nhau - Tôi có thể nhập họ?

Trả lời

4

Không, điều đó là không thể.

Bạn không thể bỏ qua phần operation_type, bởi vì bạn đã thực hiện điều này phạm vi điều tra (và đó là những điều tra phạm vi toàn diện). Nếu bạn muốn tránh nó, bạn phải biến nó thành một số enum chưa được lọc (loại bỏ từ khóa class).

Ngoài ra, bên ngoài matrix bạn không thể nhập tên thành viên thông qua tuyên bố using như thể matrix là không gian tên. Hơn nữa, theo Đoạn 7.3.3/7 của tiêu chuẩn C++ 11:

Tuyên bố sử dụng không được đặt tên là điều tra viên.

+0

có nghĩa là nếu tôi có 'class A {public: class B {}}' thì tôi không thể ghi 'bằng cách sử dụng A :: B', phải không? –

+0

@JoshuaMN: Tôi tin rằng bạn chỉ có thể làm điều đó nếu bạn viết nó bên trong một phân lớp của 'A'. –