Giả sử bạn có một C++ 0x std :: thành viên mảng của một lớp mẫu và bạn muốn khởi tạo nó bằng phương tiện của một hàm tạo mất một vài vòng lặp:Khi khởi tạo std :: array
template <typename Tp, size_t N>
class Test
{
public:
template <typename Iterator>
Test(Iterator first, Iterator last)
{
if (std::distance(first,last) > N)
throw std::runtime_error("bad range");
std::copy(first, last, _M_storage.begin());
}
private:
std::array<Tp, N> _M_storage;
};
Giả sử rằng bạn đang cung cấp một phạm vi đồng dư với dung lượng lưu trữ của bạn, có thể khởi tạo mảng std :: trong bộ khởi tạo của hàm dựng, tránh các hàm tạo mặc định của Tps trong bộ nhớ không? Có thể khai thác std :: initializer_list <> trong trường hợp này không?
Nhân tiện, số nhận dạng bắt đầu bằng dấu gạch dưới và được theo sau bởi một chữ hoa được đặt trước. Ngoài ra, nó phải là 'std :: distance (first, last)'. – GManNickG
Đã sửa lỗi giám sát. Vấn đề với các nhà xây dựng mặc định thêm vẫn còn ... –