C++ 如何在DDS idl文件中定义类和方法?

C++ 如何在DDS idl文件中定义类和方法?,c++,class,idl,data-distribution-service,opendds,C++,Class,Idl,Data Distribution Service,Opendds,我是DDS的新手。。。。到目前为止,我在OpenDDS和CycloneDDS方面的经验很少 是否可以在空闲文件中定义一个类,并具有成员变量和成员方法?或者DDS标准只支持结构和基本数据类型?IDL语言在中定义。它由许多构建块组成,这些构建块包括核心数据类型,如您提到的结构和基本数据类型,以及接口,其中包括您询问的方法 然而,DDS只使用这些构建块的一个子集。例如,第9.3节DDS配置文件定义了哪些与DDS的三种不同支持级别相关:普通DDS、可扩展DDS和RPC上的DDS 您将看到,后者确实包括构

我是DDS的新手。。。。到目前为止,我在OpenDDS和CycloneDDS方面的经验很少


是否可以在空闲文件中定义一个类,并具有成员变量和成员方法?或者DDS标准只支持结构和基本数据类型?

IDL语言在中定义。它由许多构建块组成,这些构建块包括核心数据类型,如您提到的结构和基本数据类型,以及接口,其中包括您询问的方法

然而,DDS只使用这些构建块的一个子集。例如,第9.3节DDS配置文件定义了哪些与DDS的三种不同支持级别相关:普通DDS、可扩展DDS和RPC上的DDS

您将看到,后者确实包括构建块接口-Basic,正如您可能从RPC中所期望的那样。但是,并非所有DDS实现都支持RPC。普通DDS和可扩展DDS更受支持,接口不是该功能的一部分


既然您在另一个问题中问了这个问题:请注意,DDS over RPC中捕获的接口功能不是为了用对象的方法分发对象,而是为了远程调用对象上的方法,正如远程过程调用的名称所暗示的那样。

IDL语言是在中定义的。它由许多构建块组成,这些构建块包括核心数据类型,如您提到的结构和基本数据类型,以及接口,其中包括您询问的方法

然而,DDS只使用这些构建块的一个子集。例如,第9.3节DDS配置文件定义了哪些与DDS的三种不同支持级别相关:普通DDS、可扩展DDS和RPC上的DDS

您将看到,后者确实包括构建块接口-Basic,正如您可能从RPC中所期望的那样。但是,并非所有DDS实现都支持RPC。普通DDS和可扩展DDS更受支持,接口不是该功能的一部分


因为您在另一个问题中问到了这一点:请注意,DDS over RPC中捕获的接口功能不是为了用对象的方法分发对象,而是为了远程调用对象上的方法,正如远程过程调用的名称所暗示的那样。

您的问题的另一个答案是,您可能,询问后续问题,就好像这是第一个问题一样。构建分布式系统有许多不同的方法,针对您的问题,有三个例子似乎是合适的:

  • 那些围绕远程过程调用/远程方法调用而设计的:在这个上下文中,CORBA是完美的参考,但是有很多(RPC、gRPC、DCOM,你可以随便说)
  • 那些围绕交付对象而设计并实现的工具:一个例子是Java/JINI,但还有很多其他的例子(浏览器中的JavaScript可以被认为是一个例子)
  • 那些围绕运输状态(也称为普通旧数据)设计并添加/转换该状态:古代历史中的拼接,今天的DDS
您的问题表明您正在寻找用于进行分布式对象计算的中间件。如果这确实是你想要的,DDS是一个非常次优的选择。是的,RPC可以构建在它之上(RPC over DDS只是让它更容易实现),在一个主要围绕分布式状态构建的系统中,这样做是有意义的


如果可以使用对象的方法序列化对象,那么当然可以使用DDS在网络中分发它们(通过这种方式可以做一些有趣的事情)。然而,这更多地是您所使用的编程语言的功能,而不是中间件的功能,IDL在这方面对您没有帮助。

您的问题的另一个答案是,您可能在问后续问题,就像它是初始问题一样。构建分布式系统有许多不同的方法,针对您的问题,有三个例子似乎是合适的:

  • 那些围绕远程过程调用/远程方法调用而设计的:在这个上下文中,CORBA是完美的参考,但是有很多(RPC、gRPC、DCOM,你可以随便说)
  • 那些围绕交付对象而设计并实现的工具:一个例子是Java/JINI,但还有很多其他的例子(浏览器中的JavaScript可以被认为是一个例子)
  • 那些围绕运输状态(也称为普通旧数据)设计并添加/转换该状态:古代历史中的拼接,今天的DDS
您的问题表明您正在寻找用于进行分布式对象计算的中间件。如果这确实是你想要的,DDS是一个非常次优的选择。是的,RPC可以构建在它之上(RPC over DDS只是让它更容易实现),在一个主要围绕分布式状态构建的系统中,这样做是有意义的

如果可以使用对象的方法序列化对象,那么当然可以使用DDS在网络中分发它们(通过这种方式可以做一些有趣的事情)。然而,这更多的是您所使用的编程语言的功能,而不是中间件的功能,IDL不会帮助您实现这一点