Возможно, будет работать массив boost::function
:
#include <boost/function.hpp>
#include <boost/lambda/bind.hpp>
#include <vector>
struct A
{
virtual ~A(void) {}; // base classes should always have virtual destructors
typedef std::vector<boost::function<int(void)> > function_array;
function_array mFunctions;
};
struct B : A
{
B(int pX) : mX(pX) // use initializer lists
{
mFunctions.push_back(boost::lambda::bind(&B::foo, this));
}
int foo(void)
{
return mX + 1;
}
int mX;
};
int main(void)
{
B b(5);
A& a(b);
int x = a.mFunctions[0]();
// x is 6
}
Ваши цели до сих пор неясны.(Выше не было смысла для A
быть базовым классом. Почему бы не иметь функцию типа get_functions
, которая просто возвращает массив функций, которые все настроены и готовы к использованию, например?)1007 *
Какая у вас здесь более широкая картина?Похоже, вы ищете виртуальные функции:
struct A
{
virtual ~A(void) {} // base classes should always have virtual destructors
virtual int foo(void) const = 0;
};
struct B : A
{
B(int pX) : mX(pX) {}
int foo(void) const
{
return mX + 1;
}
int mX;
};
int main(void)
{
B b(5);
A* a = &b;
int x = a->f(); // calls B::foo(), polymorphic behavior thanks to virtual
// x is 6
}