Passar variáveis ​​entre C ++ e Lua através trago

votos
3

Eu estou trabalhando em um projeto C ++ com um grande número de classes (150+), cada um dos quais tem em qualquer lugar de 10 a 300 campos ou assim. Eu realmente gostaria de ser capaz de fornecer uma interface de script para fins de teste para que eu possa codificar retornos de chamada que não exigem qualquer re-compilação. Eu gostaria de fazer isso em Lua, já que estou mais familiarizado com o seu C API do que eu estou com Python, mas se ele vai poupar dores de cabeça que eu ficaria feliz em fazê-lo em Python.

Eu tenho uma sólida compreensão sobre como chamar funções Lua do meu C ++ e vice-versa, e eu sei como passar tipos de dados básicos e para trás. A pergunta que tenho é como compartilhar tipos de dados especificados pelo usuário entre os dois usando SWIG.

Por exemplo, em algum momento da minha C ++, eu poderia querer avaliar um par de pedaços de dados dos membros em um objeto que tem 250 campos. Gostaria de ser capaz de entregar esse objecto fora para Lua que podia, em seguida, (esperançosamente?) Utilizar os invólucros SWIG gerados para manipular esse objecto, exibir certos campos, e, em seguida, passar o (potencialmente alterados) objeto de volta para C ++ para uso continuado .

Também gostaria de ser capaz de instanciar uma instância do objecto em Lua usando os invólucros e passá-lo para C ++ para ser usado como uma versão normal de C ++ do objecto.

Isso é possível? Alguém poderia me aponte para um tutorial ou um exemplo explícito?

Obrigado por qualquer ajuda que você pode oferecer!

Publicado 19/05/2009 em 19:55
fonte usuário
Em outras línguas...                            


3 respostas

votos
1

Contanto que você envolver seus tipos definidos pelo usuário usando interfaces Swig (ver aqui para documentação sobre Swig-Lua API), a interação deve ser perfeita. Os invólucros Swig fornecidos permitirá que você instanciar novos objetos, passá-los para C ++ e vice-versa.

Eu não acredito que trago-Lua embrulho suporta aulas diretor ainda, o que significa que estender classes existentes, instanciar-los e passá-los de volta para C ++ não é possível. Administração são suportados para linguagens como Python, Java, C # embora.

Respondeu 19/05/2009 em 20:03
fonte usuário

votos
0

Você também deve verificar se Luabind. Este implementa OOP para Lua e pode mapear classes e tipos de dados da Lua de volta para C ++.

Respondeu 07/03/2010 em 23:12
fonte usuário

votos
0

Se gole lhe dá problemas, eu tive sorte com a mais recente versão do tolua ++, que é para o único propósito de ligação C ++ e Lua. Ele requer um arquivo .h modificado como entrada, que é um pouco tedioso, mas não mais do que módulos de Swig. Eu não tenho nenhuma razão para preferir um sobre o outro, mas é bom saber sobre ambos.

Respondeu 20/05/2009 em 00:00
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more