我想以通用的方式比较结构,我已经做了这样的事情(我不能分享实际的来源,所以如果有必要,请询问更多细节):
template<typename Data>
bool structCmp(Data data1, Data data2)
{
void* dataStart1 = (std::uint8_t*)&data1;
void* dataStart2 = (std::uint8_t*)&data2;
return memcmp(dataStart1, dataStart2, sizeof(Data)) == 0;
}
Run Code Online (Sandbox Code Playgroud)
这主要按预期工作,但有时即使两个 struct 实例具有相同的成员(我已经使用 eclipse 调试器进行了检查),它也会返回 false。经过一番搜索,我发现memcmp由于使用的结构被填充,这可能会失败。
有没有更合适的方法来比较对填充无动于衷的内存?我无法修改使用的结构(它们是我正在使用的 API 的一部分),并且使用的许多不同结构具有一些不同的成员,因此无法以通用方式单独比较(据我所知)。
编辑:不幸的是,我被 C++11 困住了。应该早点提到这个...
我最近开始使用 Node.js 来制作一个在线游戏(用于教育)。通过阅读各种教程,我想出了如下所示的简单代码。使用我拥有的代码,我能够进行客户端-服务器通信,这基本上是我制作游戏所需的全部内容。只有一个问题,只有客户端可以发起会话,而服务器只能响应。除此之外,我还需要随时将当前的游戏状态从服务器发送到客户端。例如,在 2 人游戏中,当玩家发送更改游戏状态的命令时,需要将新的游戏状态转发给两个玩家。
Node.js 有没有一种简单的方法可以做到这一点?我知道您不能简单地向客户端发送消息,因为不能期望客户端打开端口供服务器使用,但也许有一种方法可以让客户端留下连接供服务器使用?我是那种通过例子学习的人,因此一些简单的工作代码将不胜感激。
顺便说一句,我正在 firebase 上托管游戏,以防相关。
索引.js:
const functions = require('firebase-functions');
const express = require('express');
const app = express();
app.post('/game', (request, response) => {
request.body.randomNumber = Math.random();
console.log(request.body);
response.json(request.body);
});
exports.app = functions.https.onRequest(app);
Run Code Online (Sandbox Code Playgroud)
索引.html:
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<input type="text" id="commandbox" onkeypress="send(this)">
<br>
<div id="display"></div>
<script>
const send = (ele) => {
if (event.key === 'Enter') {
console.log(ele.value);
const json = {
name: "John",
gender: "male",
age: 25,
message: ele.value
};
postToGame(json); …Run Code Online (Sandbox Code Playgroud)