c++ - 运算符重载 C 结构

标签 c++ operator-overloading

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

在头文件 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= 必须是成员函数。他们的the rules .

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

一般来说,您应该尽量避免为不属于您的类型重载运算符。疯狂就这样撒谎。

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

关于c++ - 运算符重载 C 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54590698/

相关文章:

c++ - QtDesigner中如何默认隐藏QLabel

c++ - `class<T>` 到 `class<const T>` 转换运算符的惯用方式

c++ - 调用 operator() 时是否可以提供模板参数?

c++ - 复制构造函数和动态分配

c++ - grpc & protobuf -- 错误:std::result_of<> 中没有名为 'type' 的类型

c++ - 在 Vista 上清除 Listview 标题图像时出现问题

c++ - g++ 不采用的可变参数推导指南,clang++ 采用 - 谁是正确的?

c++ - 在 C++ 中重载运算符 + 和 -

c++ - 为什么没有 1 :1 relationship between assignment and equality operators?

c++ - 将附加参数传递给 remove_if