我想存储同一类的两个对象之间的差异。
我知道我可以覆盖operator==
来比较两个对象。
我现在想知道是否有比以下示例更好的方法来获取两个对象之间的差异:
class ExampleClass {
public:
ExampleClass();
friend std::vector<std::string> compare(const ExampleClass& other) {
std::vector<std::string> result;
if(attribute1_ != other.attribute1_) {
result.push_back("attribute1_");
}
// continue for other attributes
return result;
}
private:
std::string attribute1_;
int attribute2_;
}
在那个例子中,我不得不比较每个属性。
答案 0 :(得分:1)
我不是模板专家,所以我将展示如何使用宏来简化您的任务。
首先,您需要定义如下宏:
#define COMP_ATTR(attr) \
if (attr != other.attr) { \
result.push_back(#attr); \
}
然后您可以重写比较函数,如下所示:
friend std::vector<std::string> compare(const ExampleClass& other) {
std::vector<std::string> result;
COMP_ATTR(attribute1_);
// continue for other attributes
return result;
}