У меня есть подобный кодПочему не подходит для поиска моих перегрузок начала и конца для 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();
где std::istream_iterator<std::string>
«s begin()
и end()
определяются следующим образом
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>();
}
, который является тем, что Марк Нельсон также писал о в р Добба here. Увы, коду не удается скомпилировать в моем Visual Studio 2012 с сообщениями об ошибках
ошибка C3312: не вызываемой функции 'начать' найден для типа 'станд :: istream_iterator < _Ty>'
и
ошибка C3312: нет вызываемой функции 'конца' найден для типа 'станд :: istream_iterator < _Ty>'
Вопрос: Есть ли что-то, чего я не заметил, ошибка в компиляторе (маловероятно, но на всякий случай) или ... Ну, какие-нибудь идеи?
Эти вопросы тщательно очищаются, как сообщается Xeo. Чтобы предоставить больше информации и ссылок, это связано с моим other question на Stackoverflow, мне было интересно, как сделать синтаксический анализ на основе строк, чем обычные циклы. Немного кодирования и проверки из Интернета, и я имел рабочий эскиз следующим
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();
но была небольшая загвоздка я пытался исправить. Я думаю, что это будет выглядеть более естественно писать, как в коде, который не обобщать и не нравится
for(auto& entry : istream_range<std::string>(file)
Пожалуйста, примите к сведению различного итератора. В delimeter_tokens определяется как Nawaz любезно показал here (код не дублируется) и istream_range как в код синтеза блога here. Я думаю, что начинающие и конечные реализации должны работать, как описано в вышеупомянутом сообщении блога Code Synthesis
Последнее правило (возврат к автономным функциям begin() и end()) позволяет нам неинвазивно адаптировать существующий контейнер для интерфейса на основе диапазона.
Таким образом, мой вопрос со всем (ir) соответствующим фоном.
Я взял на себя смелость изменить заголовок вопроса, чтобы отразить фактический заданный вопрос. Откат или изменение при необходимости. – Xeo
Как мне кажется, это так. Он привлекает внимание тех, кто ищет решение, подобное моему, и тех, у кого есть проблема поиска. Как я могу сделать ваш пост ответом (или кто-то еще сделал это)? – Veksi
Спасибо за это! : D – Veksi