ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
22 декабря
1015374 Топик полностью
il-2 (02.07.2020 14:29, просмотров: 547) ответил йцyкeн на Как в C++ узнать, имеет ли класс функцию с определённым именем? Задача такая: есть шаблон функции, параметром является класс из некоторой группы. Все классы этой группы имеют функцию f(), но некоторые имеют более продвинутую функцию super_f(). Хочется вызывать super_f(), если она есть, а если нет, вызывать обычную f().
Без примера не ясно, кто на ком стоял. Про какой параметр речь - параметр шаблона или передаваемый в функцию? 

Если почему-то не катят виртуальные функции, то можно завести в классе указатель на функцию класса, который инициализируется в конструкторе на f() или super_f(). И вызывать через указатель.

Как-то так (сильно не старался, могут быть ошибки, но принцип рабочий. Через такой указатель работает вызов и виртуальных функций):


class BaseClass;

typedef void (BaseClass::*BaseClassCB)(int param);

class BaseClass
{
BaseClassCB EventFunc;
...
};

class Class1 : public BaseClass
{
void f(int param);
Class1() EventFunc((BaseClassCB)(&Class1::f))  { }
};



class Class2 : public BaseClass
{ 
void super_f(int param); 

Class2() EventFunc((BaseClassCB)(&Class2::super_f)) { } 
};