c++ - 将结构复制/移动到另一个结构

标签 c++ struct access-rights

当您不必处理指针时,将结构复制/移动到另一个结构非常容易。
但就我而言,我必须处理指针和访问权限。

protected:
          addrinfo *hints, *result;
...
hints = new addrinfo;
...
getaddrinfo(0, port.c_str(),  hints, &result); // result is protected - can't do that.

memmove/memcpy 可以使用,但是 addrinfo 包含一个指向 sockaddr 的指针。 我想使用一个临时结构来传递 getaddrinfo 然后将所有内容移动到 result,但问题总是存在。
如果您需要其他详细信息,请告诉我。

编辑:@Mike Woolf 你给了我一个主意。由于基类是一个抽象类,我什至可以公开这些结构,因为用户无法实例化它。不过还是谢谢你的回答。

最佳答案

在这种情况下,我会编写自己的复制函数。可能是这样的

void structCopy(struct* dest, const struct* src);

在此函数内部,使用 memcpy() 复制除指针以外的所有内容。

我在制作多人游戏时不得不做这样的事情 - 像这样复制指针。在这种模式中,通常假设这是一个准确理解它必须做什么的函数——也就是说,structCopy() 是专门为这个特定结构设计的。所以它知道对象内部有一个sockaddr。

真的,只需在此函数中硬编码您希望如何处理它。你想让它在另一端创建一个新的 sockaddr 吗?然后让复制功能做到这一点。或者任何有效的方法。

TL;DR - 为您的结构创建一个特殊的复制函数,该函数知道结构内部的内容并让它根据您的规范处理 sockaddr。通过使其成为类(或友元函数)的一部分,您不会通过对函数进行硬编码来违反任何规则。

关于c++ - 将结构复制/移动到另一个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21500603/

相关文章:

c - 两个相互包含的结构体

c# - 为什么注册表写在与预期不同的位置?

python - openerp 7 中的字段级访问权限和安全性

c++ - 在没有临时变量的情况下直接将cin捕获到函数作为参数

c++ - 包含时没有这样的文件 iostream.h

c++ - 在 C++ 中是否有 “right” 原型(prototype)函数的方法?

c++ - 设计线程安全类时避免嵌套调用时的死锁

swift - 如何用几个相关的 CGPoint 数组构造 Swift 代码

C 传递结构作为参数(继承)

Windows 服务 : Install fonts