#c #file-io
Вопрос:
У меня есть простая функция печати, подобная этой:
template <class T>
void ArrayList<T>::print() const {
//store array contents to text file
for (int i = 0; i < length; i )
{
cout << *(list i) << endl;
}
}
Он выводит значение в массиве. Я хочу, чтобы это работало так:
Если функция ArrayList ‘print’ вызывается без аргумента, то она запишет информацию в стандартный поток вывода. Однако переменная типа «ofstream» — это то, что она должна записывать информацию в файл.
Я изменил функцию для записи в файл, но теперь, если я не передам аргумент, он покажет ошибку. Есть ли способ сделать это как для записи в файл (если аргумент передан), так и для стандартной печати (если аргумента нет)?
template <class T>
void ArrayList<T>::print(std::ofstreamamp; os) const {
//store array contents to text file
for (int i = 0; i < length; i )
{
os << *(list i) << endl;
}
}
Комментарии:
1. Либо используйте аргумент по умолчанию, либо перегрузите функцию.
Ответ №1:
Что вы можете здесь сделать, так это принять значение an std::ostreamamp;
в качестве параметра. Тогда print
функции все равно, куда выводятся данные.
static void print( std::ostreamamp; os )
{
os << "I don't care where this data is goingn";
}
int main( )
{
// Pass it std::cout.
print( std::cout );
// Or pass it an std::fstream.
std::fstream file{ "/Path/To/File/File.txt", std::ios::out };
print( file );
}