【发布时间】:2010-10-14 18:40:17
【问题描述】:
只是一个快速简单的问题,但在任何文档中都找不到。
template <class T>
T* Some_Class<T>::Some_Static_Variable = NULL;
它使用 g++ 编译,但我不确定这是否有效。是吗?
【问题讨论】:
标签: c++ class templates static variable-assignment
只是一个快速简单的问题,但在任何文档中都找不到。
template <class T>
T* Some_Class<T>::Some_Static_Variable = NULL;
它使用 g++ 编译,但我不确定这是否有效。是吗?
【问题讨论】:
标签: c++ class templates static variable-assignment
这是有效的 C++,但它与模板化赋值运算符无关?! sn -p 定义了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;
}
在实现variant-like 类时,模板赋值运算符对于提供转换最有用。但是,如果您要使用这些小动物,则应考虑许多注意事项。 Google search 会发现有问题的案例。
【讨论】:
是的,这段代码是正确的。有关详细信息,请参阅此 C++ 模板教程
【讨论】: