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

在实现类变体类时,模板赋值运算符对于提供转换最有用。但是,如果您要使用这些小动物,则应考虑许多警告。谷歌搜索会发现有问题的案例。

于 2009-03-22T18:55:39.560 回答