【问题标题】:Templated assignment operator: valid C++?模板赋值运算符:有效的 C++?
【发布时间】:2010-10-14 18:40:17
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    这是有效的 C++,但它与模板化赋值运算符无关?! sn -p 定义了SomeClass&lt;T&gt; 的一个静态成员,并将其初始值设置为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;
    }
    

    在实现variant-like 类时,模板赋值运算符对于提供转换最有用。但是,如果您要使用这些小动物,则应考虑许多注意事项。 Google search 会发现有问题的案例。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      猜你喜欢
      • 2019-06-30
      • 2015-01-27
      • 2016-05-18
      • 1970-01-01
      • 2011-05-23
      • 2014-07-06
      • 2015-02-25
      • 2011-11-14
      相关资源
      最近更新 更多