Специфичный для домена язык в C / C ++, является ли это кошерным?

StackOverflow https://stackoverflow.com/questions/348616

  •  20-08-2019
  •  | 
  •  

Вопрос

Я просто дурачился с некоторыми языковыми проектами, специфичными для конкретной предметной области, для нового проекта на 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.Вам понадобится другой макрос для динамических команд, чтобы заставить его работать, что меня бы не устроило.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top