Есть вот такой код где функция
word_count
принимает ссылку на поток.
Как правильно написать данную функцию чтобы можно было делать вызов как
word_count(ifs)
, так и вызов
word_count(std::ifstream("./main.cpp"))
?
И как изменить код чтобы можно было бы сделать и вызов
word_count(ifs)
при условии что ifs может быть const?
Вроде как для универсальной ссылки нужно использовать &&, но вместе с этим как я понял нужно использовать и std::forward, но не понимаю куда его вписать корректно если в принципе нужно его прописывать.
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <iterator>
template <typename T>
std::size_t word_count(T& is)
{
return std::distance(std::istream_iterator<std::string>(is), {});
}
int main()
{
std::ifstream ifs("./main.cpp");
std::cout << "There are " << word_count(ifs) << " words" << std::endl;
return 0;
}