通用运算符==用于非Pod对象

时间:2019-06-13 14:26:58

标签: c++

在进行一些单元测试时,我希望能够比较一些非常简单的结构(它们仅包含公共数据成员)。我可以分别为它们全部写一个operator==,但这会很麻烦且重复。因此,我决定尝试以通用方式执行此操作。但是有一个问题-它们中的一些不是POD,因为它们的某些字段具有非POD类型,例如,以std::list为例。

struct NonPod {
    std::list<int> lst;
};

struct NonPod2 {
    std::list<NonPod> lst;
};

template<class T>
bool operator==(const T& lhs, const T& rhs) {
    //what should I put here to make it work safely 
    //to compare NonPod with other NonPod
    //ant NonPod2 with other NonPod2
} 

AFAIK,为了安全地比较POD,我可以只使用std::memcmp,就可以了。是否可以对非POD类型也进行通用operator==?如果可以,怎么办?

1 个答案:

答案 0 :(得分:1)

可悲的是,在C ++ 17(或更早版本)中没有办法做到这一点。 C ++ 20将允许您添加:

mapper = [('Item_number', ('Item number', 91)), ('Item', ('Item name', 62))]
for i in mapper:
    print(', '.join(map(str, (*[i[0]],*[*i[1]]))))
Item_number, Item number, 91
Item, Item name, 62

每个班级。这将为您提供所有以明显方式定义的比较运算符。

如果类是由代码生成器创建的,那么添加比较函数应该很容易。