Je pensais que j'allais faire un __DEBUG
rapide et sale a permis le suivi avec quelque chose comme ceci:classe de débogage factice collée sur std :: endl surcharge
#ifdef __DEBUG
# define dbg std::cout
# define err std::cerr
#else
#include <iostream>
class dummy_cout
{
private:
public:
dummy_cout & operator << (auto &obj)
{ return *this; }
dummy_cout & operator << (std::result_of< decltype(&std::endl) >::type &obj)
{ return *this; }
};
# define dbg dummy_cout()
# define err dummy_cout()
#endif
int main(int argc, char *argv[])
{
dbg << "Bla, bla. bla..." << std::endl;
}
Mais il me donne:
cond_dbg.cpp:16:66: error: decltype cannot resolve address of overloaded function
dummy_cout & operator << (std::result_of< decltype(&std::endl) >::type &obj)
J'ai également essayé une demi-douzaine de variations de decltype
, result_of
, ostream
, etc. mais je n'ai pas encore obtenu d'autre mesure.
Ça devrait être simple. Si je compile le code définissant __DEBUG
, j'aurais cout
et cerr
. Si je fais une compilation normale, j'aurais mon dummy_cout
, qui ne fait simplement rien mais permet à mon code de compiler sans changements et peu de fouillis.
Toute aide sera grandement appréciée.
Un commentaire sur votre opérateur '' << surcharge 'classe dummy_cout': C'est tout simplement pas comment vous surchargez C++' std :: insertion ostream' opérateurs .... – WhiZTiM
Pourquoi avez-vous besoin de traiter 'std :: endl' séparément? Il devrait être capturé par la version modélisée. –
Merci @Henri Menke. C'était mon tout premier procès mais ça n'a pas marché. 'template argument deduction/substitution failed' – j4x