Linguagem específica do domínio em C/C ++, esse kosher?
Pergunta
Eu estava apenas brincando com alguns designs de idiomas específicos de domínio para um novo projeto em C/C ++ quando pensei nessa solução "estranha":
define DSL(...) MakeCommand(#__VA_ARGS__\
)->Exec()->GetResults()
MyResults results = DSL( for p in people do something );
A parte agradável é que isso está correto pelos padrões (mas também é um interruptor de duff) e, portátil, portátil, etc ... no entanto, esse método não é realmente melhor do que escrever strings em código, mas como as salas de mecanismo DSL De qualquer forma, as cordas parecem parecer mais bonitas dessa maneira e reduz a desordem. Mas estava se perguntando o que outros pessoas pensam sobre isso.
Obrigado
Solução
Hmm, enquanto as macros variadas são C99, eles não são possíveis no C ++. Eu não faria assim :) uma simples função DSL levando um std::string
ou qualquer que seja a classe String que sua estrutura use e retornando MakeCommand(str)->Exec()->GetResults()
Seria minha opção preferida, pois é mais amigável de depuração e você pode colocá -la em um espaço para nome.
Você também poderá criar strings de comando dinamicamente e passá -lo para a função. Usando sua abordagem macro, passando um str
variável passaria realmente "str"
para a função makecommand. Você precisaria de outra macro para comandos dinâmicos para fazê -lo funcionar, com o qual eu não me sentiria confortável.