可以转换C#get,将代码设置为C++

Possible to convert C# get,set code to C++

本文关键字:代码 设置 C++ 转换 C#get      更新时间:2023-10-16

我在C#中有以下代码:

public string Temp
        {
            get { return sTemp; }
            set { 
                sTemp = value;
                this.ComputeTemp();
            }
        }

有可能转换这个并以这种方式使用get和set吗?我知道你不能这样申报,我需要":"来申报,但当我尝试这样做时:

public:
        std::string Temp
        {
        get { return sTemp; }
        set { 
                sTemp = value;
                this.ComputeTemp();
            }

我收到的错误是在第一个"{"声明expected a ';'上。关于如何修复它,有什么建议吗?

您正在使用C++/CLI吗?如果是,这就是属性语法

public:
  property std::string Temp { 
    std::string get() { return sTemp; }
    void set(std::string value) { sTemp = value; this->ComputeTemp(); } 
  }

如果你试图使用普通的C++,那么你就没有运气了。普通C++代码没有等效的特性。您将需要求助于getter和setter方法

public:
  std::string GetTemp() const { return sTemp; } 
  void SetTemp(const std::string& value) { 
    sTemp = value;
    this->ComputeTemp();
  }

复制粘贴类似问题的答案之一:

警告:这是开玩笑的回应,太可怕了

是的,有点可能:)

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;
};

并调用C#样式!

Test a;
a.text = "blah";
std::string content = a.text;

在Visual C++中,您可以使用__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();
    }