【发布时间】:2012-11-29 20:14:05
【问题描述】:
我需要一些可以添加到任意函数或函数调用的东西(如注释、反射、定义或完全不同的东西)。
对于每个添加了此内容的函数f,应使用f 的参数调用特定函数t。
函数t 现在应该通过网络将其参数发送到其他程序。
有没有办法做这样的事情?
【问题讨论】:
标签: c++ annotations auto-generate
我需要一些可以添加到任意函数或函数调用的东西(如注释、反射、定义或完全不同的东西)。
对于每个添加了此内容的函数f,应使用f 的参数调用特定函数t。
函数t 现在应该通过网络将其参数发送到其他程序。
有没有办法做这样的事情?
【问题讨论】:
标签: c++ annotations auto-generate
这背后的一般原则称为marshalling,其中函数的参数以一种您可以将它们发送到其他计算机的方式进行包装。发送方编组参数,接收方解组。两者都需要了解类型,并且必须以与不同计算机体系结构一致的方式进行。
远程过程调用 (RPC) 是将函数调用从一台计算机发送到另一台计算机的一种方式,并且需要在它们后面进行一些编组。
正如 Victor 所指出的,XMLRPC 是一种实现方式,其中编组通过 XML 进行。还有很多其他包,谷歌搜索 RPC 和编组应该提供更多可能性,但 XMLRPC 可能正是您想要的。
CORBA 和 DCOM 是相关的机制。在计算机之间发送函数调用的想法是分布式系统中的一个主要概念,所以也许再看一看,可能有非常简单的解决方案来解决您的具体问题。
【讨论】:
XMLRPC 库可能是您正在寻找的库,如果您只想调用远程机器上的函数。它使用 XML RPC 规范生成用于编组参数的代码。
【讨论】:
您可以为此使用 Google 协议缓冲区:https://developers.google.com/protocol-buffers/docs/overview
它是一个易于使用且可移植的序列化库。此外,您将能够编写能够以不同语言(如 Python、Java 等)与您的 C++ 代码“对话”(反序列化由您的 C++ 代码序列化的对象)的程序,这非常有用,例如便于测试.
【讨论】:
如果您在 Linux/BSD 环境中,请执行“man rpcgen”。我发现使用 DCE/CORBA 构建分布式应用程序更容易。
让我们给你想要做的事情命名,“进程间函数调用”或 IFC。
我一直致力于开发 IFC 编译器 (ifcc),用于生成可扩展的云应用,并在应用中内置基于浏览器的实时可见性。
原型编译器正在工作。框架的可见性部分也在工作,但尚未集成到编译器中以生成检测代码。
Ifcc 将 C 包含文件作为其输入,并根据 .h 文件中的函数原型声明,生成用于编组的 C 源代码,以及适用于异构(注意字节顺序/大端/小端)环境。
而且,哦,顺便说一句,ifcc 是一个智能编译器。它不仅处理数组、typedef、嵌套结构等,而且还进行任意指针追踪。例如。如果你用一个指向双向链表的指针调用一个函数,它会将它打包,发送并在接收端重新创建双向链表。
如果人们有兴趣使用它,请添加一条注释,其中包含您系统的“uname -a”输出以及您正在使用的编译器。如果有很多兴趣,我可以让开发人员学习/玩/实验。
【讨论】: