Добрый день!
Допустим есть такой код:
struct runable {
virtual void execute() = 0;
};
struct runable_for_str : runable {
char temp[256];
const char* value;
runable_for_str(const char* value) :value(value) {}
virtual void execute() { /* Some logic here */ }
};
struct runable_for_int : runable {
int value;
runable_for_int(int value) :value(value) {}
virtual void execute() { /* Some logic here */ }
};
void proc1(const runable& callback) {}
void proc2(const runable& callback) {}
Сейчас вызов процедур proc1, proc2 выглядит как
proc1(runable_for_str("Some string")) {}
proc2(runable_for_int(123)) {}
Есть ли возможность каким-то паттерном автоматически определять тип? В идеале чтобы вызов свелся к следующему
proc1("Some string");
proc2(123);
Если же так не получится, то хотябы к такому:
proc1(driver_proc("Some string"));
proc2(driver_proc(123));
Я пробывал пойти через промежуточную функцию driver_proc — там перегрузка типов работает, но преобразовать промежуточные классы в runable() не получается.