привет!
вопрос скорее не про сравнение, но про поиск среди множества MFP одного конкретного.
ситуация: есть некоторое кол-во MFP. сейчас сабж реализован таким способом:
struct type {
struct mf_stat {
...
};
template<typename ...Args>
const mf_stat* get_stat(void(type::*mf)(Args...)) const {
if ( mem_fn_ptr_equal(&type::m0, mf) ) {
return std::addressof(m0_stat);
}
if ( mem_fn_ptr_equal(&type::m1, mf) ) {
return std::addressof(m1_stat);
}
if ( mem_fn_ptr_equal(&type::m2, mf) ) {
return std::addressof(m2_stat);
}
return nullptr;
}
private:
template<typename P>
static bool mem_fn_ptr_equal(P l, P r) { return l == r; }
template<typename PL, typename PR>
static bool mem_fn_ptr_equal(PL, PR) { return false; }
private:
void m0(int) {}
mf_stat m0_stat;
void m1(char) {}
mf_stat m1_stat;
void m2(float) {}
mf_stat m2_stat;
};
обратите внимание на функцию get_stat(). эта финукция генерится препроцессором, т.е. не руками. но вопрос не в этом. вопрос в красивости =)
можно ли как-то это сделать по-красивей и переносимей?
в масив-то не положишь их — сигнатуры могут быть разными...
в switch() — тоже, но не из-за сигнатур.
какие идеи?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)