Duplicar posible:
Can you write object oriented code in C?experimento: orientado a objetos C?
Hola!
Por el gusto de hacerlo, he estado experimentando estos dos últimos días creando un entorno de objetos muy sencillo y muy sencillo en C. puro. He estado jugando con macros, enlaces dinámicos, estructuras de descripción de tipos y similares, y he llegado a la siguiente:
string_o str = new(String, "hello world");
list_o list = new(List);
List.pushf(list, str);
printf("In the list: \"%s\"\n",
String.text(List.popf(list)));
delete(list);
delete(str);
se ve y funciona un poco agradable, pero no puedo imaginar una forma de métodos de instancia falsos. No puedo pasar Class.function(instance)
, no sin macro reemplazos globales para los nombres de funciones, lo que frustra el propósito de la encapsulación.
De nuevo, este es un experimento, solo por el desafío y la diversión =). ¿Pueden ayudarme a encontrar una manera de hacer esto? No quiero usar preprocesamiento adicional, solo macros simples C y GCC.
editar> se olvidó de decir: no quiero que cada instancia contenga los punteros a función en su estructura. Eso me daría la sintaxis del método bien, pero significaría que un objeto de datos de 4 bytes tendría una docena de punteros de función copiados en cada instancia. Eso es como hacer trampa = P haha
¡Gracias de antemano!
¿no es eso por lo que crearon cpp?: P – Tobias
Asociar cada 'clase' con una tabla de punteros de función que se ejecutan cuando se llama a una 'función de miembro'? – birryree
@Tobias: _shudder_, ¡espero que no! [C++: un pulpo hecho clavando patas adicionales en un perro.] (Http://en.wikiquote.org/wiki/Programming_languages#C.2FC.2B.2B) - Steve Taylor: P –