Pregunta

Al hacer enlaces Lua para clases C ++, ¿debo devolver tablas u objetos de datos de usuario?

¿Alguien sabe alguna de las ventajas y desventajas de cada método?

¿Fue útil?

Solución

Recomiendo devolver datos de usuario. Independientemente del enfoque, tiene que haber un lugar para colocar el puntero. a los datos de C ++, o los datos reales de C ++ en sí, y no hay ningún lugar seguro hacer esto con una mesa.

Devolver tablas tendría sentido en algunas situaciones, porque pueden ser 'anotado' en Lua con atributos adicionales sin tener que hacer algo extra para apoyar esto. Desafortunadamente, el puntero del objeto C ++ tiene que ir a algún lado, y no hay ningún lugar sensato para que vaya a otro que una entrada real en la tabla misma.

Este no es un lugar muy seguro para ir. Puede ser encontrado por Lua código, y eliminado o reemplazado. Esto podría ser por accidente o en propósito, realmente no importa.

Por lo tanto, mi preferencia es devolver objetos de datos de usuario. Ellos pueden ser hecho para funcionar como tablas si uno realmente debe insistir en eso, pero también tiene un "secreto" área (los datos de usuario reales en sí) donde el C ++ el puntero de objeto se puede almacenar, a salvo de sobrescribir con el código Lua.

(Los objetos de datos de usuario también tienen un puntero de "entorno", que es otro lugar para almacenar datos específicos del objeto. Al igual que con la carga útil de datos de usuario en sí mismo, este valor es inaccesible para el código Lua y no se puede dañar de esa manera.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top