2015-07-02 24 views

Trả lời

23

a không phải là loại, do đó bạn không thể áp dụng :: cho nó. Bạn có thể sử dụng để lấy decltypea 's loại:

std::array<int, 1> a; 
std::array<decltype(a)::value_type, 1> a2; 
+0

Bắt tốt, '+ 1' từ tôi. – sbi

1

Quentin đã đưa cho bạn một cách để làm được việc này. Còn hai cái nữa.

Các giải pháp rõ ràng, tất nhiên, là để thay thế tên của đối tượng a với tên của loại của nó:

std::array<typename std::array<int, 1>::value_type, 1> a2; 

Tuy nhiên, nhìn vào mã của bạn, tôi tự hỏi nếu những gì bạn muốn là xác định loại, thay vì đối tượng. Tôi nghĩ aa2 làm cho tên loại đặc biệt xấu (do đó sự nghi ngờ của tôi là có thể sai), nhưng ở đây bạn đi:

typedef std::array<int, 1> a; 
typedef std::array<typename a::value_type, 1> a2; 

Bây giờ bạn có thể tạo ra các trường hợp của các loại.

Các vấn đề liên quan