Je suis amusant avec des macros (non)erreurs macro avec fonction membre
#include <iostream>
using namespace std;
#define DEF_ATTRIBUTE(type, name) type name;\
typedef void (*type_name_t)(CLASS_NAME*);\
type_name_t ptr_type_name;\
void type_name(){(ptr_type_name = &CLASS_NAME::type_name);}\
class Test
{
public:
#define CLASS_NAME Test
DEF_ATTRIBUTE(int, i_Test);
void Print()
{
cout << "Test::Print()" << endl;
}
};
int main()
{
Test t;
t.Print();
}
qui se développe pour:
class Test
{
public:
int i_Test; typedef void (*type_name_t)(Test*); type_name_t ptr_type_name; void type_name(){(ptr_type_name = &Test::type_name);};
void Print()
{
cout << "Test::Print()" << endl;
}
};
et donne l'erreur du compilateur:
main.cpp: In member function void Test::type_name():
main.cpp:16: error: cannot convert void (Test::)() to void ()(Test*) in assignment
Comme autant que je peux comprendre, les pointeurs de fonction sont équivalents. Qu'est-ce que je fais mal?
macros Utilisation en C++? Mettre des macros au milieu du code? – Raveline
Nous y revoilà. Si vous ne l'aimez pas, ne postez pas. Je ne demande pas d'avis, juste une réponse. – nakiya
Je pense que c'est l'une de ces macros carrées essayant de s'adapter à un problème rond. – Skizz