【发布时间】:2016-02-24 23:25:44
【问题描述】:
我正在寻找一种通过一系列成员变量调用运算符的方法。我的目标是将每个变体的引用数量减少到恰好 1 个。以下 MWE 说明了我所拥有的以及我正在努力实现的目标。
有效的 c++1z:
template<typename... Args> bool all(Args... args) { return (args && ...); }
struct foo {
std::string m1;
std::string m2;
int m3;
double m4;
bool compare(const foo& rhs) const {
return all(m1 == rhs.m1, m2 == rhs.m2, m3 == rhs.m3, m4 == rhs.m4);
}
}
我想要实现的是更多的形式:
...
return all<*this, rhs>(m1, m2, m3, m4);
第二种形式的确切语法无关紧要。但是,我不是在寻找宏或“只写 {return *this == rhs;} 答案。如果可以避免,则无需使用现代功能。
【问题讨论】:
-
使用
tup!e::tie似乎是个不错的选择。如果您可以使用tie定义一个将要比较的元素作为引用元组返回的成员函数,您可以免费获得两个这样的元组之间的比较。
标签: c++ reflection metaprogramming