У меня есть функция A , код которой немного изменяется в зависимости от того, является ли входная структура struct B или struct C. Я не хочу писать A дважды, поэтому я инкапсулировал разницу в операторе ()
структур.
Моя проблема в том, что A обрабатывает много данных, и оператор ()
называется экстенсивно. Я хотел бы заменить эту часть макросами для повышения производительности моего кода. Примерно так:
#define B_TASK(data) //macro for B's task
#define C_TASK(data) //macro for C's task
struct B();
struct C();
template<class struct_t>
function A(struct_t data){
//some irrelevant code
.
.
while(..){ //extensive loop
#if data == B //my original code uses data()
B_TASK(data)
#else
C_TASK(data)
#endif
}
}
int main(){
B b_inst;
C c_inst;
A<B>(b_inst);
A<C>(c_inst);
}
Возможно ли сделать что-то подобное? Я не знаю, как запросить имя структуры в препроцессоре #if
.