L' std::cout
objet a une signification fixe, et c'est à la sortie du standard de flux. L'utilisateur de votre programme peut contrôler où la norme est connecté, pas vous. Ce que vous pouvez faire est de décider si vous voulez écrire dans un fichier, à la norme ou à tout autre flux de sortie. Donc, dans votre code, vous passer ce flux que vous écrivez.
Encore une fois, le point de l'écriture, de la standard volet est de donner à l'utilisateur une flexibilité dans le choix de l'emplacement de la sortie passe à. Vous n'êtes pas censé rediriger standard; c'est quelque chose que l'utilisateur est censé avoir la liberté de le faire.
Une autre chose est que vous ne devriez pas mélanger C IO et C++ IO dans un programme C++. Choisir les IO de la bibliothèque que vous souhaitez travailler et de s'y tenir.
Cela dit, vous pouvez en C++ assez élégamment commutateur de flux pour une fonction à partir de par le template de la fonction de gestionnaire sur les paramètres du modèle de std::basic_istream<>
. Ensuite, la fonction va lire son entrée à partir du flux d'entrée indépendamment du type réel de flux de travail avec. Voici un exemple:
#include<iostream>
#include<fstream>
#include<string>
template<class Ch, class Tr>
void dodge_this(std::basic_istream<Ch, Tr>& in)
{
// in is an input stream. read from it as you read from std::cin.
}
int main(int argc, char* argv[])
{
if( std::string(argv[1]) == "cin" ) {
dodge_this(std::cin);
} else if( std::string(argv[1]) == "file" ) {
std::ifstream file("input.txt");
dodge_this(file);
} else {
dodge_this(dev_null_stream); // i just made that up. you get the idea.
}
}