Это действительно 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;
}
Оператор присваивания шаблона наиболее полезен для обеспечения преобразований при реализации вариантов классов. Есть несколько предостережений, которые вы должны принять во внимание, если собираетесь использовать этих тварей. A Поиск в Google вызовет проблемные случаи.