Y’a aussi moyen de gérer ça en jouant sur les fichiers d’implémentation et gérer le choix de l’OS dans la configuration de projet
genre
| // taclasse.h
class TaClasse
{
// ...
public:
void log();
private:
std::istream make_file();
};
|
| // taclasse.cpp
void TaClasse::log()
{
std::istream logfile = make_file();
auto & now = std::chrono::system_clock::now();
logfile << (now.hours()*3600+now.minutes()*60+now.seconds());
}
|
| // taclasse_windows.cpp
std::istream TaClasse::make_file()
{
const std::string filename = "hidden";
make_hidden(filename);
return std::istream(filename);
}
|
| // taclasse_unix.cpp
std::istream TaClasse::make_file()
{
const std::string filename = ".hidden";
return std::istream(filename);
}
|
(bon le code est sûrement faux, j’ai pas fais les vérifications adéquats et j’ai pas regardé la doc de make_hidden, mais je pense qu’on comprend l’idée)
pour qu’ensuite ce soit la configuration de projet (donc make, cmake, Scons, qmake, premake, whatever …) qui choisisse le fichier d’implémentation en fonction du système ciblé
pour que la compilation exécute soit g++ -c taclasse.cpp taclasse_windows.cpp
soit g++ -c taclasse.cpp taclasse_unix.cpp
Bien sûr, les directives préprocesseur c’est mieux car ça n’affecte pas l’écriture de ta classe, et puisque tu n’as finalement pas de raison de ne pas les utiliser c’est sûrement la meilleur solution, mais je répond quand même à la question initiale, au cas où.
EDIT : Oops, le sujet est en C et j’ai fait du C++, mais l’idée est la même