c++ oop setter getter accessor

¿Hay una manera de generar captadores y definidores automáticamente si no están presentes en C++?



oop setter (8)

Tengo experiencia con Objective-C, y en Objective-C puedes dejar que el compilador genere captadores y definidores para ti si aún no están presentes ( @synthesize ).

¿Hay alguna forma de hacer esto en C ++, o tengo que implementar yo mismo todos los captadores y configuradores?


Al menos en Visual Studio 2015, no puedo encontrarlo. Sin embargo, si usa Resharper, entonces podría generar el setter y el getter en el archivo .h


La ventaja para mí de usar accesores (especialmente fácil en la forma de c # vb.net) es

1 / la posibilidad de establecer un punto de interrupción en un colocador o en un captador, de lo contrario no puede saber quién y cuándo tiene acceso al miembro.

2 / Puede controlar qué valor se establece en caso de que sea necesario probar el desbordamiento u otro conjunto incorrecto. Esto es especialmente necesario en una biblioteca pública, como un editor de propiedades para su componente visual por ejemplo.

Pero esto no es totalmente necesario en su clase interna privada. Entonces, la elección de un acceso controlado a un miembro debe establecerse desde el uso público final de su objeto, creo.


No el compilador en sí, pero un IDE como eclipse CDT puede realizar esta acción automáticamente (haga clic con el botón derecho en clase> Fuente> Generar generadores y definidores ...).


No hay manera de hacer esto. Sin embargo, si usa un IDE con todas las funciones como Eclipse (no estoy seguro si Visual Studio tiene esta característica), hay opciones de conveniencia para que el IDE genere el código de obtención / configuración para usted.


No tengo conocimiento de tal utilidad, y probablemente no vería mucho uso en C ++ moderno idiomático:

Las pautas modernas de C ++ sostienen que su clase no debería tener captadores y definidores . De hecho, los setters son casi completamente inútiles, y los getters tienen una utilidad muy limitada. Esto está relacionado con el bien establecido principio de ingeniería de software , no preguntes .

Si desea cambiar el estado de una instancia de clase, hay dos formas de hacerlo:

  1. Realizas una acción en él que muta su estado.
  2. Se crea una nueva instancia.

El estado de mutación a través de los configuradores suele ser un signo de olor de código y un mal diseño arquitectónico.

Admito que hay excepciones a esta regla, simplemente por razones prácticas. Y esto está bien, pero las excepciones son lo suficientemente bajas como para que no garanticen herramientas para generar automáticamente los generadores y asignadores. De hecho, puede usar esto como una prueba de fuego: cuando se encuentre deseando una herramienta para autogenerar tal placa de calderas, retroceda un paso y reconsidere su diseño.


No, el compilador no te ayuda con eso. Por ejemplo, podría crear un MACRO o generar algún código en su paso de compilación.


Si está utilizando algún tipo de marco que generará los POCO para usted, entonces sí, es posible "generar" el código repetitivo para que esto suceda, pero primero debe introducir el concepto en el marco o IDE.


Tienes que implementarlas tú mismo.