繁体   English   中英

运算符重载C结构

[英]Operator Overloading a C struct

我希望能够为我在C ++代码中使用的C结构( <time.h> / std::tm in <ctime> struct tm创建赋值运算符。 这对我的程序来说没有必要,我只是想知道是否可以覆盖它。 任何帮助将不胜感激。

在头文件tm_operators.hpp中:

#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 */

我得到的错误是Overloaded 'operator=' must be a non-static member function 我无法访问类定义,所以有什么办法可以设置这个运算符吗?

不。如错误所示, operator=必须是成员函数。 他们是规则

对于该特定情况,您可以创建一个函数,而不是按值返回新的tm 但我发现你也在努力实现许多其他运营商。

通常,您应该尽量避免为不属于您的类型重载运算符。 那种疯狂就是谎言。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM