online - Posible convertir C#obtener, establecer código a C++
de c# a java (3)
¿Está utilizando C ++ / CLI? Si es así esta es la sintaxis de la propiedad.
public:
property std::string Temp {
std::string get() { return sTemp; }
void set(std::string value) { sTemp = value; this->ComputeTemp(); }
}
Si estás tratando de usar C ++ normal, estás fuera de suerte. No hay una característica equivalente para el código normal de C ++. Tendrá que recurrir a los métodos de getter y setter.
public:
std::string GetTemp() const { return sTemp; }
void SetTemp(const std::string& value) {
sTemp = value;
this->ComputeTemp();
}
Tengo el siguiente código en C #:
public string Temp
{
get { return sTemp; }
set {
sTemp = value;
this.ComputeTemp();
}
}
¿Es posible convertir esto y usar get y set de esta manera? Sé que no puedes declarar así y necesito el ":" para declarar, pero cuando intento hacer esto:
public:
std::string Temp
{
get { return sTemp; }
set {
sTemp = value;
this.ComputeTemp();
}
El error que recibí está en el primer "{" que indica expected a '';''
. ¿Alguna sugerencia sobre cómo solucionarlo?
En Visual C ++ puedes usar __declspec(property)
, así:
public:
__declspec(property(get=get_Temp, put=set_Temp)) std::string Temp;
const std::string& get_Temp { return sTemp; }
void set_Temp(std::string value) {
sTemp = std::move(value);
this->ComputeTemp();
}
Para copiar pegar una de mis respuestas de una pregunta similar:
ADVERTENCIA: ¡Esta es una respuesta irónica y es terrible!
Sí, es algo posible :)
template<typename T>
class Property
{
private:
T& _value;
public:
Property(T& value) : _value(value)
{
} // eo ctor
Property<T>& operator = (const T& val)
{
_value = val;
return(*this);
}; // eo -
operator const T&() const
{
return(_value);
}; // eo ()
};
Luego declara tu clase, declarando propiedades para tus miembros:
class Test
{
private:
std::string m_Test;
public:
Test() : text(m_Test)
{
};
Property<std::string> text;
};
¡Y llame al estilo C #!
Test a;
a.text = "blah";
std::string content = a.text;