Bonjour,


J'ai une classe A qui possède deux constructeurs:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
A(const int error, const std::string& message = "", const char* filename = __FILE__, const int line = __LINE__);
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
A(const std::string& message, const char* filename = __FILE__, const int line = __LINE__);

Pour me simplifier l'écriture, j'aurais aimé écrire un truc du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
#define A(a) A(a, __FILE__, __LINE__)
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
#define A(a,b) A(a,b,__FILE__,__LINE__)
Mais ce n'est pas possible car c'est une redéfinition de ma macro A...

J'ai donc tenté une écriture à base de templates:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
 template <typename T, typename A, typename B>
 T ctor(A a, B b){
	return T(a, b, __FILE__, __LINE__);
 }
 
 template <typename T, typename A>
 T ctor(A a){
	return T(a, __FILE__, __LINE__);
 }
Mais l'ennui c'est que les __FILE__ et __LINE__ correspondent aux lignes de déclaration de mes templates et non aux lignes d'appel à ctor<A>(0, "toto") ou ctor<A>("titi") dans le code...

J'avoue que je sèche un petit peu...