Как печатать в файле и с помощью cout с той же функцией в c ?

#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 );
}