21

私は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 ';'ます。それを修正する方法について何か提案はありますか?

4

3 に答える 3

38

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();
  }
于 2013-07-30T19:11:14.700 に答える
11

同様の質問から私の回答の1つをコピーして貼り付けるには:

警告: これは皮肉な反応であり、ひどいものです!!!

はい、それは一種の可能性です:)

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;
于 2013-07-30T19:21:38.873 に答える
3

__declspec(property)Visual C++ では、次のように を使用できます。

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();
    }
于 2013-07-31T04:59:48.533 に答える