А можно хотя бы чуточку поподробнее.
Если я правильно понял, у вас есть какое-то конечное множество базовых классов и чуть бОльшее множество дочерних классов.
И вам нужно в какой-то одной точке (скорее всего в generic'е) получать указатель на объект дочернего класса и вызывать виртуальный метод его родительского класса.
Так вот, самый танковый метод, сделать статический map (hash) из имён родительских классов и функторов, принимающих только this, вызывающих соответсвующий member function.
Т.е.
C++ (Qt)
static QHash< QString, boost::function<void(QObject*)> > baseMethods;
if( baseMethods.isEmpty() )
{
baseMethods[ "BaseClass1" ] = boost::bind( & BaseClass1::m, _1 );
baseMethods[ "BaseClass2" ] = boost::bind( & BaseClass2::m, _1 );
baseMethods[ "BaseClass3" ] = boost::bind( & BaseClass3::m, _1 );
...
baseMethods[ "BaseClassN" ] = boost::bind( & BaseClassN::m, _1 );
}
Ну а затем в точке, где требуется вызывать метод, делаете
C++ (Qt)
QString const baseClassName = obj->metaObject()->superClass().className();
baseMethods[ baseClassName ]( obj );
Это, конечно, изврат, но попробовать стоит. Правда, я не уверен, как там будут обстоять дела со множественным наследованием.
Ну либо, имена всех дочерних классов закинуть в map в качестве ключей, а значения продублировать для одинаковых базовых классов.
P.S. Если используете C++11/14 то можно вместо boost использовать std ;-)