Специфичный для домена язык в C / C ++, является ли это кошерным?
Вопрос
Я просто дурачился с некоторыми языковыми проектами, специфичными для конкретной предметной области, для нового проекта на C / C ++, когда придумал это "странное" решение:
define DSL(...) MakeCommand(#__VA_ARGS__\
)->Exec()->GetResults()
MyResults results = DSL( for p in people do something );
Приятная часть в том, что это правильно по стандартам (но так же, как и Duff Switch), а также кроссплатформенно, переносимо и т.д...Однако этот метод на самом деле ничуть не лучше, чем запись строк в код, но поскольку движок DSL все равно анализирует строки, так он выглядит красивее и уменьшает беспорядок.Но мне было интересно, что думают по этому поводу другие люди.
Спасибо
Решение
Хм, хотя переменные макросы используются на C99, они невозможны в C ++.Я бы не стал делать это так :) Простая dsl-функция, принимающая std::string
или любой другой строковый класс, который использует ваш фреймворк, и возвращающий MakeCommand(str)->Exec()->GetResults()
это был бы мой предпочтительный вариант, поскольку он более удобен для отладки, и вы можете поместить его в пространство имен.
Вы также сможете динамически создавать командные строки и передавать их функции.Используя ваш макропроцессорный подход, передавая str
переменная действительно прошла бы "str"
к функции MakeCommand.Вам понадобится другой макрос для динамических команд, чтобы заставить его работать, что меня бы не устроило.