【发布时间】:2017-06-18 08:52:16
【问题描述】:
有许多原始结构(数百个),用于在两个组件(例如播放器和服务器)之间传输数据。其中没有方法,只有原始数据。 任务是编写所有请求和答案,以便能够在没有服务器的情况下重播玩家场景(我们记住所有问题和所有答案,它们都是纯函数)。 所以任务是把这个结构放在没有比较器的映射中。现在我们使用memcmp,它允许不用考虑这个结构的变化,它很紧凑,但是填充等问题太多了。
是否有可能在 c++ 中通过元编程获得像 getHashValue 或任何默认比较器这样的东西? 条件: 1)我不想为每个结构创建一个比较器。 2) 如果一个字段被添加或删除,如果它破坏了现有的行为并且需要修复,我想有一个错误。 3) 我不想用结构定义更改头文件。
结构示例
struct A {
int a;
int b;
c c;
}
bool operator<(const A& a1, const A& a2)
{
if (a1.a != a2.a) return a1.a < a2.a;
if (a1.b != a2.b) return a1.b < a2.b;
if (a1.c != a2.c) return a1.c < a2.c;
return false;
}
我可以考虑用其他语言来实现这个确切的部分(收集问题/答案),如果它不需要再次描述该语言上的所有这些结构。
【问题讨论】:
-
我猜你的意思是
memcmp而不是memcpy
标签: c++ c++11 struct comparison metaprogramming