Надо в одну коллекцию собрать указатели на различные однотипные функции, определённые в разных классах. Оцните такой вариант
class AbstractFunction {
public:
virtual float operator() (int) = 0;
};
template<class T>
class Function : public AbstractFunction {
public:
typedef float (T::*PFN_METHOD)(int);
Function(T* obj, PFN_METHOD pfn) : _obj(obj), _pfn(pfn) {}
virtual float operator() (int k) {
return (_obj->*_pfn)(k);
}
protected:
T* _obj;
PFN_METHOD _pfn;
};
Для использования что — то типа
////////////////////////////////
class Test1 {
public:
float fn1(int k) {
return 2*k;
}
};
class Test2 {
public:
float fn2(int k) {
return k+100;
}
};
/////////////////////////////////
void use() {
AbstractFunction *func[2];
Test1 t1;
Test2 t2;
// заполнение
func[0] = new Function<Test1>(&t1, Test1::fn1);
func[1] = new Function<Test2>(&t2, Test2::fn2);
AbstractFunction *f=func[0];
// вызов
float r = (*f)(1);
delete func[0];
delete func[1];
}