我需要一些可以添加到任意函数或函数调用的东西(如注释、反射、定义或完全不同的东西)。
对于添加了这个东西的每个函数f
,都t
应该使用 的参数调用一个特定的函数f
。
该函数t
现在应该通过网络将其参数发送到其他程序。
有没有办法做这样的事情?
我需要一些可以添加到任意函数或函数调用的东西(如注释、反射、定义或完全不同的东西)。
对于添加了这个东西的每个函数f
,都t
应该使用 的参数调用一个特定的函数f
。
该函数t
现在应该通过网络将其参数发送到其他程序。
有没有办法做这样的事情?
这背后的一般原则称为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 源代码,以及适用于异构(负责字节顺序)的客户端和服务器代理/存根/big endian/little endian) 环境。
而且,哦,顺便说一句,ifcc 是一个智能编译器。它不仅处理数组、typedef、嵌套结构等,而且还进行任意指针追踪。例如,如果您使用指向双向链表的指针调用函数,它将打包、发送并在接收端重新创建双向链表。
如果人们有兴趣使用它,请添加一条注释,其中包含您系统的“uname -a”输出以及您正在使用的编译器。如果有很多兴趣,我可以让开发人员学习/玩/实验。