¿C -like propiedades en C ++ nativo?

En C # / .NET puedes hacer algo como esto:

someThing.text = "blah"; String blah = someThing.text; 

Sin embargo, el código anterior en realidad no interactúa directamente con la cadena de texto de someThing, sino que usa una propiedad get y set. Del mismo modo, se pueden usar propiedades de solo lectura.

¿Hay alguna manera de hacer algo similar en C ++ nativo? (no C ++ .NET)

En .NET, las propiedades son azúcar sintáctico para las funciones reales get y set que se emiten detrás de escena (de hecho, son más que azúcar sintáctica porque las propiedades se emiten en la IL resultante y podrían usarse con Reflection). Entonces en C ++ necesitarás escribir explícitamente esas funciones ya que no existe tal noción como propiedad.

ADVERTENCIA: ¡Esta es una respuesta irónica y es terrible!

Sí, es posible 🙂

 template class Property { private: T& _value; public: Property(T& value) : _value(value) { } // eo ctor Property& operator = (const T& val) { _value = val; return *this; }; // eo operator = operator const T&() const { return _value; }; // eo operator () }; 

Luego declare su clase, declarando propiedades para sus miembros:

 class Test { private: std::string _label; int _width; public: Test() : Label(_label) , Width(_width) { }; Property Label; Property Width; }; 

¡Y llama al estilo C #!

 Test a; a.Label = "blah"; a.Width = 5; std::string label = a.Label; int width = a.Width; 

Te lo advierto: no es C ++ nativo; solo es específico de Microsoft . Pero puedes usar declspec(property) :

 struct S { int i; void putprop(int j) { i = j; } int getprop() { return i; } __declspec(property(get = getprop, put = putprop)) int the_prop; }; int main() { S s; s.the_prop = 5; // THERE YOU GO return s.the_prop; } 

cf MSDN, declspec (propiedad) .