BUG?: сломан импорт из библиотеки использующей шаблонизированные классы

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Stanislav Korotky
26272
Stanislav Korotky  
Прошу совета у сообщества программистов-профессионалов. Было бы желательно, чтобы ситуацию прокомментировали разработчики MQ.

Имеется проект, использующий шаблонизированные классы json. Все работает как надо. Однако стоит задача оформить проект в виде библиотеки. Соответственно его рабочий интерфейс экспортируется из библиотеки и импортируется в клиентский код. Заголовочный файл с классами json (плюс заголовочный класс хэша из зависимостей) используется в открытом неизменном виде и там, и там.

Здесь возникает проблема в том, чтобы сигнатуры классов, генерируемых шаблонами в библиотеке и в клиентском коде совпадали. Для этого были написаны специальные методы инициализации. Также с помощью дополнительных средств были собраны списки всех реально генерируемых специализаций в коде, и сейчас гарантировано, что все необходимые специализации классов и методов должны совпадать в библиотеке и в клиентском коде. Однако происходит нечто странное.

в зависимости от структуры скрытого кода в имплементации библиотеки (не json) импорт портится - возникает ошибка

Cannot find 'createWorkInterface' in 'jsonlib.ex5'
unresolved import function call

Как обычно, портится он при желательном - оптимальном и удобном - использовании шаблонов json. А чинится при переписывании проблемных фрагментов тривиальными, неудобными способами, причем даже не понятно, почему способы не эквивалентны с точки зрения компилятора.

Прикладываю в архиве заголовочные файлы, код библиотеки и использующий её демонстрационный скрипт. Проблемные строчки помечены в библиотеке комментариями. Сейчас там импорт сломан. Чтобы его починить, нужно раскомментарить последний вариант реализации (все остальные закомментировать).

PS. Решение нашел, добавив ломающий импорт код в инициализацию (object["akeystring"]["akeystring"]), но все равно интересно, почему так.

Файлы:
bugtmpimp.zip 18 kb
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий