2009-03-21 11 views
0

すばやく簡単な質問ですが、どのドキュメントでも見つけられませんでした。テンプレート代入演算子:有効なC++?

template <class T> 
T* Some_Class<T>::Some_Static_Variable = NULL; 

これはg ++でコンパイルされますが、これが有効かどうかはわかりません。それは...ですか?

答えて

6

はいこのコードは正しいです。 C++有効ですが、それはテンプレート代入演算子とは何の関係もありません詳細は

http://www.is.pku.edu.cn/~qzy/cpp/vc-stl/templates.htm#T14

+0

@ダニエル:また、[cplusplus.com](http://www.cplusplus.com/doc/tutorial/templates/)ではテンプレートについてよく説明しています。 – Lazer

1

のために、このC++テンプレートのチュートリアルを参照してください!スニペットは、固定メンバーをSomeClass<T>と定義し、その初期値をNULLに設定します。あなたが一度だけそれをしない限り、これはうまくいきます。そうでなければ、あなたは恐ろしいOne Definition Ruleを踏みます。テンプレート代入演算子は変種様クラスを実装する際の変換を提供するために最も有用である

class AClass { 
public: 
    template <typename T> 
    AClass& operator=(T val) { 
     std::ostringstream oss; 
     oss << val; 
     m_value = oss.str(); 
     return *this; 
    } 
    std::string const& str() const { return m_value; } 
private: 
    std::string m_value; 
}; 

std::ostream& operator<<(std::ostream& os, AClass const& obj) { 
    os << obj.str(); 
    return os; 
} 

int main() { 
    AClass anObject; 
    anObject = 42; 
    std::cout << anObject << std::endl; 
    anObject = "hello world"; 
    std::cout << anObject << std::endl; 
    return 0; 
} 

テンプレート代入演算子はのようなものです。あなたはこれらの動物を使用するつもりならば、考慮すべき注意点があります。 Google searchは問題のあるケースを引き起こします。

関連する問題