адрес метода в качестве ID
От: niXman Ниоткуда https://github.com/niXman
Дата: 23.04.19 16:05
Оценка:
привет!

есть некоторый класс с членами-функциями. для каждой функции-члена есть ассоциированная структура '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 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.