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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top