Tôi đang cố gắng hiểu số boost array. Các code có thể được đọc dễ dàng từ trang web của tác giả.Tôi nên khởi tạo tăng :: mảng như thế nào?
Trong lý do thiết kế, tác giả (Nicolai M. Josuttis) đã đề cập rằng hai kiểu khởi tạo sau đây là có thể.
boost::array<int,4> a = { { 1, 2, 3 } }; // Line 1
boost::array<int,4> a = { 1, 2, 3 }; // Line 2
Trong thử nghiệm của tôi với g ++ (phiên bản 4.1.2) Dòng 1 đang hoạt động nhưng Dòng 2 thì không. (Tuyến số 2 mang lại như sau:
warning: missing braces around initializer for 'int [4]'
warning: missing initializer for member 'boost::array<int, 4ul>::elems'
)
Tuy nhiên, câu hỏi chính của tôi là, làm thế nào Line 1 đang làm việc? Tôi cố gắng để viết một lớp học tương tự như array.hpp và sử dụng tuyên bố như Line 1, nhưng điều đó không làm việc :-(. Lỗi này là
typedef array< unsigned int, 10 > MyArray;
MyArray b = { { 1, 2, 3 } }; // Line 74
array_test.cpp:74: error: in C++98 'b' must be initialized by constructor, not by '{...}'
array_test.cpp:74: error: no matching function for call to 'array<unsigned int, 10u>::array(<brace-enclosed initializer list>)'
array.h:16: note: candidates are: array<unsigned int, 10u>::array()
array.h:16: note: array<unsigned int, 10u>::array(const array<unsigned int, 10u>&)
Ai đó có thể giải thích cho tôi? Có một số điều tăng cụ thể xảy ra trong dòng 1 mà tôi cần phải nhận thức được?
Như Potatoswatter đề cập đến điều này chỉ làm cho POD loại. Tuy nhiên, có thể đáng chú ý là thông số C++ 0x sắp tới cung cấp các cách hỗ trợ cho các danh sách khởi tạo với các kiểu không phải kiểu nhóm. –
bạn có thể có hàm tạo hoặc trường riêng trong lớp của bạn – Anycorn
+ 1 @aaa: Cảm ơn rất nhiều. Có, mảng của tôi (dữ liệu) là riêng tư trong lớp của tôi. – Arun