Хочу реализовать возможность передавать в качестве аргумента функции указатель на метод разных классов.
class A1
{
public:
void show()
{
std::cout << "A1" << std::endl;
}
};
class B1
{
public:
void show()
{
std::cout << "B1" << std::endl;
}
};
void callf(void (*fp)())
{
fp();
}
int main()
{
callf(&A1::show);
callf(&B1::show);
return 0;
}
Ответ
В вашем варианте забыта мелочь - то, что нестатическая функция-член требует наличия объекта, для которого вызывается. Так что просто так вызвать не получится, нужен объект.
Или статическая функция.
Вот так - запросто:
class A1
{
public:
static void show()
{
std::cout << "A1" << std::endl;
}
};
class B1
{
public:
static void show()
{
std::cout << "B1" << std::endl;
}
};
void callf(void (*fp)())
{
fp();
}
int main()
{
callf(&A1::show);
callf(&B1::show);
return 0;
}
Если все же не статические - то, например, вот:
class A1
{
public:
void show()
{
std::cout << "A1" << std::endl;
}
};
class B1
{
public:
void show()
{
std::cout << "B1" << std::endl;
}
};
template
int main()
{
A1 a;
B1 b;
callf(a,&A1::show);
callf(b,&B1::show);
return 0;
}
Комментариев нет:
Отправить комментарий