2013-07-30 17 views
20

にコードを設定しますか? 「:」私はこれを行うにしようとすると宣言したがために:は、私はC#で次のコードを持っているC++

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

私は受信エラーがexpected a ';'を述べ、「{」最初の上にある、私はあなたがそうのように宣言することはできませんし、私が必要とすることを知っています。どのようにそれを修正するための任意の提案?

+14

**司会注:**この質問は、既にそのコースを実行しています。あなたがその真実性についてコメントしたいのであれば、[meta post](http://meta.stackexchange.com/questions/191089/why-do-we-let-hostile-users-dictate-the-perception-スタックオーバーフロー)。ありがとう。 –

+1

ネイティブC++の[C#のようなプロパティの可能な重複?](0120-338-002) –

答えて

37

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(); 
    } 
+3

後者の場合、標準的な命名規則はゲッタの 'T temp()'とセッタの 'void temp(T value)'になります。 – CodesInChaos

+0

@CodesInChaos私は両方の方法を見たことがあります(Get/Setプレフィックスとプレフィックスなし)。私の個人的な好みは、Get/Setプレフィックスを持つことです。おそらくはJavaの初期の段階から支配します。 – JaredPar

11

に頼る必要があります。

警告:これは冗談の応答であり、ひどいです! !

class Test 
{ 
private: 
    std::string m_Test; 

public: 
    Test() : text(m_Test) 
    { 
    }; 

    Property<std::string> text; 
}; 

とC#のスタイルを呼び出す:

はい、それはその後、あなたのメンバーのプロパティを宣言し、自分のクラスを宣言可能一種の:)

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

です!あなたはこのような__declspec(property)を、使用することができますVisual C++で

Test a; 
a.text = "blah"; 

std::string content = a.text; 
+0

このようにプロパティを設定すると、クラスが少し大きくなります。 –

+0

@MooingDuck、正しいまた、最初にそれを行うことをアドバイスします。したがって、トップポイントでの免責条項は*できます*ちょっとええ...;) –

+2

+1、悪くて賢いです。 – JaredPar

3

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(); 
    } 
+0

しかし、Tempがアクセス/変更された場所をgrepするのが簡単なので、 'Temp'というプロパティを使わずに' get_Temp/set_Temp'を直接使用する方が良いでしょう。 – Abyx

関連する問題