0

簡単で簡単な質問ですが、どのドキュメントにも見つかりませんでした。

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

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

4

2 に答える 2

6

はい、このコードは正しいです。詳細については、この C++ テンプレート チュートリアルを参照してください。

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

于 2009-03-21T21:41:03.057 に答える
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 で検索すると、問題のあるケースが表示されます。

于 2009-03-22T18:55:39.560 に答える