使用 std::equal_to 等测试特定的结构数据成员
Testing a specific struct data member with std::equal_to, etc
#include <algorithm>
#include <functional>
#include <vector>
struct blah {
int member;
};
int main (int argc, const char* argv[])
{
blah a = { 1 };
auto are_same = std::bind(
std::equal_to<blah>(),
a,
std::mem_fn(&blah::member) // Obviously not a function, but I tried.
);
std::vector<blah> blahs = { {0}, {1}, {2} };
return static_cast<int>(std::any_of(blahs.begin(), blahs.end(), are_same));
}
此程序编译失败 (GCC 4.4(:
error: no match for call to ‘(std::equal_to<blah>) (blah&, std::_Mem_fn<int blah::*>&)’
除了自己编写循环代码之外,基于数据成员检查等效性的正确方法是什么?
如果您已经在使用 C++11,为什么不使用 lambda?
int main (int argc, const char* argv[])
{
blah a = { 1 };
auto are_same = [=](blah const& b) -> bool {
return a.member == b.member;
};
std::vector<blah> blahs = { {0}, {1}, {2} };
return static_cast<int>(std::any_of(blahs.begin(), blahs.end(), are_same));
}
如果你不能使用 lambdas,你可以使用 bind 来做函数组合:
using namespace std::placeholders;
auto are_same = std::bind(
std::equal_to<int>(),
std::bind(&blah::member, _1),
std::bind(&blah::member, a)
);
除了自己编写循环代码之外,基于数据成员检查等效性的正确方法是什么?
检查等效性的正常方法是实现operator==
。在您的情况下,我想它看起来像这样:
bool operator==( const blah & lho, const blah & rho )
{
return ( lho.member == rho.member );
}
相关文章:
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 从 XML 中读取未指定结构的每个数据成员
- 如何将结构数据成员传递到函数中
- 单独构造结构的数据成员合法吗
- 用于向公众公开数据成员的帮助程序结构
- 通过指针算法访问结构数据成员
- 具有引用数据成员的结构不是文本类型吗?
- 在结构向量中搜索一个数据成员,然后打印匹配的所有数据成员
- 我将如何访问类中结构的数据成员
- 访问嵌套结构的数据成员并将结构传递到功能C
- 如何在STD :: MAP中找到具有至少一个数据成员等于密钥的结构的元素
- 为什么C++编译器不优化对结构数据成员的读取和写入,而不是不同的局部变量?
- 有没有办法将数组行为作为静态结构数据成员?
- 从私有结构数据成员访问类公共成员函数C++
- 单个结构数据成员的奇怪指针地址
- 扩展类/结构C++数据成员的更好方法
- 使用 std::equal_to 等测试特定的结构数据成员
- 需要获取结构数据成员的偏移量
- C++正在将文本文件读取到结构数据成员中