Для чего это нужно - я написал простенький интерпретатор, заточенный под мои нужды. У меня есть несколько алгоритмов которые применяются к интерфейс-классу параметров (в примере заменено на int). Алгоритмы запускаются один за другим в какой-то последовательности, заданной в файле конфигурации. Я читаю файл конфигурации и запускаю алгоритмы в том порядке, как в нем указано.
У меня есть несколько уже существующих классов для разных семейств алгоритмов. Пока я работаю с каким-то одним классом -все нормально, тот код что я привел в посте #9 меня полностью устраивает: там есть инстанс (я имею в виду инициализированный об'ект - пользуююсь своим жаргоном) класса, и я запускаю его методы как мне и нужно.
Но если мне надо работать с 2 классами одновременно - то мне нужно какое-то образование, чтобы держало инстансы всех нужных мне классов, и вызывало их методы в зависимости от входных данных. Надо учесть что классы алгоритмов уже написаны и их сильно менять не желательно -сегодня я просто добавил "обертку" на существующие методы, чтобы унифицировать интерфейс.
Цитата:
множество унифицированных классов алгоритмов и сделать для них общий автоматический азпускальшик по контексту
|
именно это я и пытаюсь сделать, но не знаю как
как бы я хотел, чтобы это выглядело в коде :
Код:
class CAlg1; // has methods m11(), m12(), m13()
class CAlg2; // has methods m11(), m12(), m13()
// all method have same declaration int mXX( int )
...
CAlg1 a1(1,2,3); // initialize class
CAlg2 a2(3,4); // initialize class
Caller interp(a1, a2); // initialize Caller class with necessary algoritihms instances
// Set mapping from name to method
interp.Map("m11", &CAlg1::m11);
interp.Map("m12", &CAlg1::m12);
interp.Map("m13", &CAlg1::m13);
interp.Map("m21", &CAlg2::m21);
interp.Map("m22", &CAlg2::m22);
...
interp.Call("m11", 0); // call specific algorithm
interp.Call("m21", 10); // call specific algorithm
while ( /* read method and params from file */ )
interp.Call(method, params);