привет!
есть некоторый класс с членами-функциями. для каждой функции-члена есть ассоциированная структура 'profdata'(используется для профилирования).
класс, как и все в нем — генерится макросом.
мне нужно иметь доступ к каждому мемберу 'profdata'.
чтоб не городить ID`ы, подумал использовать в getter`е адреса методов:
struct type {
void m0() {}
void m1(int) {}
template<typename...Args>
const profdata& get_profdata(void(type::*mf)(Args...)) const {
const void *p = reinterpret_cast<const void *>(mf);
if ( p == reinterpret_cast<const void *>(&type::m0) ) {
return m_m0_0;
} else if ( p == reinterpret_cast<const void *>(&type::m1) ) {
return m_m1_0;
}
assert(!"unreachable");
}
private:
profdata m_m0_0;
profdata m_m1_0;
};
но проблема в том, что компилятор выдает ворнинг: converting from ‘void (type::*)()’ to ‘void*’ [-Wpmf-conversions]
идею с использованием адресов методов в качестве ID`ов хотелось бы оставить
спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)