tôi có mã như thế nàyTại sao không phạm vi cho tìm thấy quá tải của tôi bắt đầu và kết thúc cho std :: istream_iterator?
std::ifstream file(filename, std::ios_base::in);
if(file.good())
{
file.imbue(std::locale(std::locale(), new delimeter_tokens()));
for(auto& entry : std::istream_iterator<std::string>(file))
{
std::cout << entry << std::endl;
}
}
file.close();
nơi std::istream_iterator<std::string>
's begin()
và end()
được định nghĩa như sau
template<class T>
std::istream_iterator<T> begin(std::istream_iterator<T>& stream)
{
return stream;
}
template<class T>
std::istream_iterator<T> end(std::istream_iterator<T>& stream)
{
return std::istream_iterator<T>();
}
đó là những gì Mark Nelson cũng đã viết về trong Dr. Dobb của here. Than ôi, mã thất bại trong việc biên dịch trên Visual Studio của tôi năm 2012 với thông báo lỗi
lỗi C3312: không có chức năng callable 'bắt đầu' tìm thấy cho loại 'std :: istream_iterator < _Ty>'
và
lỗi C3312: không có chức năng callable 'kết thúc' tìm thấy cho loại 'std :: istream_iterator < _Ty>'
Câu hỏi: Có điều gì đó tôi không nhận thấy, lỗi trong trình biên dịch (không, nhưng chỉ trong trường hợp) hoặc ... Vâng, có ý tưởng nào không?
Câu hỏi này được làm sạch đáng kể, theo lời khuyên của Xeo. Để cung cấp nhiều nền và tham chiếu hơn, điều này có liên quan đến số other question trên Stackoverflow của tôi, tôi đã tự hỏi làm thế nào để làm cho việc phân tích cú pháp dựa trên dòng sạch hơn các vòng thông thường. Một chút mã hóa và kiểm tra từ internet, và tôi đã có một bản phác thảo làm việc như sau
std::ifstream file(filename, std::ios_base::in);
if(file.good())
{
file.imbue(std::locale(std::locale(), new delimeter_tokens()));
for(auto& entry : istream_range<std::string>(file)
{
std::cout << entry << std::endl;
}
}
file.close();
nhưng có một chút snag tôi đã cố gắng khắc phục. Tôi nghĩ rằng nó sẽ trông tự nhiên hơn để viết như trong mã mà không biên dịch và không giống như
for(auto& entry : istream_range<std::string>(file)
Xin vui lòng, lưu ý của trình lặp khác nhau. delimeter_tokens được định nghĩa là Nawaz vui lòng hiển thị here (mã không trùng lặp) và istream_range như trong blog Tổng hợp mã here. Tôi nghĩ việc triển khai bắt đầu và kết thúc sẽ hoạt động, như được quảng cáo trong bài viết trên blog Code Synthesis nói trên
Quy tắc cuối cùng (dự phòng cho các hàm start-free() và end() miễn phí cho phép chúng ta thích ứng không xâm lấn đến phạm vi dựa trên giao diện vòng lặp.
Do đó, câu hỏi của tôi với tất cả (ir) nền có liên quan.
Tôi đã tự do thay đổi tiêu đề câu hỏi để phản ánh câu hỏi thực tế được hỏi. Quay trở lại hoặc thay đổi nếu cần thiết. – Xeo
Nó tốt hơn thế, tôi nghĩ vậy. Nó được sự chú ý của những người đang tìm kiếm một giải pháp tương tự như tôi và những người có vấn đề tra cứu để giải quyết. Làm thế nào để làm cho bài viết của bạn như là một câu trả lời (hoặc có ai đó hoàn thành hơn làm điều đó)? – Veksi
Cảm ơn bạn vì điều đó! : D – Veksi