Подтвердить что ты не робот

Можно конвертировать С# 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 ';'. Любые предложения по его исправлению?

4b9b3361

Ответ 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();
    }