在进行一些单元测试时,我希望能够比较一些非常简单的结构(它们仅包含公共数据成员)。我可以分别为它们全部写一个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==
?如果可以,怎么办?
答案 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
每个班级。这将为您提供所有以明显方式定义的比较运算符。
如果类是由代码生成器创建的,那么添加比较函数应该很容易。