如果请求的接收者可以以与地址空间无关的方式表示,那么您可以将请求的命令对象传输到其他进程并在那里完成请求。
来自:http://www.worldcat.org/isbn/9780201633610
如何在c ++中以与地址空间无关的方式表示对象?
编辑:如何在c ++中以地址空间独立的方式表示对象,以便能够将命令对象传递到不同的进程并能够满足请求?
答案 0 :(得分:3)
我没有设计模式:可重复使用的面向对象软件的元素手册,但我想作者意味着算法不应该依赖于对象地址的实际值
因此,如果您在某个键上使用某个哈希表,则不会使用键的地址进行哈希处理,而是使用与键的内容相关的哈希值。
您不希望程序的可观察行为依赖于ASLR。
要与其他进程通信,您最好使用serialization技术和格式(例如JSON),并且您不希望该格式依赖于实际地址(特别是,它应该永远不会由于ASLR而改变。)
这并不意味着在最低级别,对象不包含地址或指针(因为指针在C ++中无处不在)。它只是意味着您不会关心这些地址的特定数值。
答案 1 :(得分:2)
至于你的问题更新:
如何在c ++中以地址空间无关的方式表示对象,以便能够将命令对象传输到不同的进程并能够满足请求?
使用de / / serialization将任何命令对象传送到另一个进程和适当的IPC技术(最简单的传输是基于套接字的通信恕我直言)。
没有用于去/序列化的c ++标准惯用解决方案,但google protobuf或boost::serialization是一个很好的帮助。
答案 2 :(得分:1)
你引用的段落来自Command模式,我认为。
也可以在网站上的各个站点找到该模式的描述。例如。 https://en.wikipedia.org/wiki/Command_pattern
命令模式的最常见表现形式是:与命令对应的数据以地址空间无关的方式传输:
我确信还有更多技术可以让您在远程计算机或不同进程中执行命令。它们只能起作用,因为命令可以以与地址空间无关的方式表示,并通过网络或跨进程边界传输。
如何在c ++中以与地址空间无关的方式表示对象?
如果命令的发送方和接收方可就基本类型的数据表示达成一致,例如char
,int
,long
,float
,{{1他们通常可以将它们用作构建块来发送和接收更高级别的对象。