运算符重载C结构

时间:2019-02-08 10:44:00

标签: c++ operator-overloading

我希望能够为我在C ++中使用的C结构(import matplotlib as mpl mpl.rcParams['text.color'] = 'White' 中的struct tm / <time.h>中的std::tm)创建赋值运算符码。对于我的程序来说,这不是必需的,我只是想知道是否有可能重写。任何帮助将不胜感激。

在头文件tm_operators.hpp中:

<ctime>

我遇到的错误是#ifndef tm_operators_hpp #define tm_operators_hpp #include <ostream> #include <ctime> static inline bool operator== (const std::tm &dt1, const std::tm &dt2 ) { return (dt1.tm_yday == dt2.tm_yday and dt1.tm_year == dt2.tm_year); } /* Works fine */ static inline bool operator!= (const std::tm &dt1, const std::tm &dt2) { return not operator== (dt1, dt2); } /* Works fine */ static inline bool operator< (const std::tm &dt1, const std::tm &dt2) { ... } /* Works fine */ static inline bool operator> (const std::tm &dt1, const std::tm &dt2) { return operator< (dt2, dt1); } /* Works fine */ static inline bool operator<= (const std::tm &dt1, const std::tm &dt2) { return not operator> (dt1, dt2); } /* Works fine */ static inline bool operator>= (const std::tm &dt1, const std::tm &dt2) { return not operator< (dt1, dt2); } /* Works fine */ static inline std::ostream & operator<< (std::ostream &os, const std::tm &dt) { char buff[11]; /* 11 characters in "dd/mm/YYYY\0" */ std::strftime (buff, 11, "%d/%m/%Y", &dt); return os << buff; } /* Works fine */ static inline std::tm & operator= (std::tm &dt, const char * str) { strptime (str, "%d/%m/%Y", &dt); return dt; } /* This requires it to be part of the original struct which I can't modify */ #endif /* tm_operators_hpp */ 。 我无权访问类定义,因此可以通过某种方式设置此运算符吗?

1 个答案:

答案 0 :(得分:6)

不。如错误所述,operator=必须是成员函数。他们的the rules

对于这种特殊情况,您可以改用按值返回新的tm的函数。但是我看到您也在尝试实现许多其他运算符。

通常,您应该尝试避免为非您自己的类型重载运算符。那样疯狂就可以说谎。

为什么不创建自己的类,它们包装 tm,并具有您想要的所有附加功能?