Я использую сервер CORBA. Каждый класс имеет удаленные методы и метод отправки с двумя возможными вводами, строку, идентифицирующую метод или целое число, которое будет индексом метода в таблице. Отображение строки в соответствующее целое будет реализовано с помощью карты.
Вызывающий отправит строку при первом вызове и вернет целое число с ответом, чтобы просто послать целое число при последующих вызовах. Это всего лишь небольшая оптимизация. Целочисленное число может быть назначено динамически по запросу объектом сервера. Класс сервера может быть получен из другого класса с переопределенными виртуальными методами.
Что может быть простым и общим способом определения привязки метода и метода отправки?
Изменить: Методы имеют одинаковую подпись (без перегрузки). Методы не имеют параметров и возвращают логическое значение. Они могут быть статическими, виртуальными или нет, переопределяя метод базового класса или нет. Связывание должно правильно обрабатывать переопределение метода.
Строка привязана к иерархии классов. Если у нас есть A:: foo(), идентифицированный строкой "A.foo", а класс B наследует A и переопределяет метод A:: foo(), он все равно будет идентифицироваться как "A.foo", но диспетчер вызовет A:: foo, если сервер является объектом A и B:: foo, если это объект B.
Изменить (6 apr): Другими словами, мне нужно реализовать свою собственную таблицу виртуальных методов (vftable) с помощью метода динамической отправки, используя строковый ключ для идентификации метода для вызова. Vftable должен быть разделен между объектами одного класса и вести себя так, как ожидалось для полиморфизма (унаследованный метод переопределения).
Изменить (28 апреля): См. мой собственный ответ ниже и редактирование в конце.