模板化赋值运算符:有效的C ++?

时间:2009-03-21 21:34:38

标签: c++ class templates static variable-assignment

只是一个快速而简单的问题,但在任何文档中都找不到。

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

它用g ++编译,但我不确定这是否是有效用法。是吗?

2 个答案:

答案 0 :(得分:6)

是的,这段代码是正确的。有关更多信息,请参阅此C ++模板教程

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

答案 1 :(得分: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会出现有问题的案例。