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