Можно конвертировать С# get, установить код на С++
У меня есть следующий код в С#:
public string Temp
{
get { return sTemp; }
set {
sTemp = value;
this.ComputeTemp();
}
}
Можно ли преобразовать это и использовать get и установить этот способ? Я знаю, что вы не можете объявить так, и мне нужно объявить ":", но когда я попытаюсь это сделать:
public:
std::string Temp
{
get { return sTemp; }
set {
sTemp = value;
this.ComputeTemp();
}
Ошибка, которую я получаю, относится к первой "{", содержащей expected a ';'
. Любые предложения по его исправлению?
Ответы
Ответ 1
Используете ли вы С++/CLI? Если это так, то синтаксис свойства
public:
property std::string Temp {
std::string get() { return sTemp; }
void set(std::string value) { sTemp = value; this->ComputeTemp(); }
}
Если вы пытаетесь использовать обычный С++, вам не повезло. Для нормального кода на С++ нет эквивалентной функции. Вам нужно будет использовать методы getter и setter
public:
std::string GetTemp() const { return sTemp; }
void SetTemp(const std::string& value) {
sTemp = value;
this->ComputeTemp();
}
Ответ 2
Чтобы скопировать вставку один из моих ответов из аналогичного вопроса:
ПРЕДУПРЕЖДЕНИЕ: Это ответ в уши и ужасно!
Да, это возможно:)
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 ()
};
Затем объявите свой класс, объявив свойства для своих членов:
class Test
{
private:
std::string m_Test;
public:
Test() : text(m_Test)
{
};
Property<std::string> text;
};
И вызовите стиль С#!
Test a;
a.text = "blah";
std::string content = a.text;
Ответ 3
В Visual С++ вы можете использовать __declspec(property)
, например:
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();
}