Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当模式不固定时,如何使用平面缓冲区? 我的C++应用程序当前的工作如下: 1.它涉及启动另一个进程,并使用windows共享内存在两个进程之间进行通信。 2.数据在一个进程中序列化,在另一个进程中反序列化。但是,数据类型也可能根据用户输入而变化,因此该类型也会被序列化,以便反序列化程序能够正确解释数据_C++_Serialization_Deserialization_Ipc_Flatbuffers - Fatal编程技术网

当模式不固定时,如何使用平面缓冲区? 我的C++应用程序当前的工作如下: 1.它涉及启动另一个进程,并使用windows共享内存在两个进程之间进行通信。 2.数据在一个进程中序列化,在另一个进程中反序列化。但是,数据类型也可能根据用户输入而变化,因此该类型也会被序列化,以便反序列化程序能够正确解释数据

当模式不固定时,如何使用平面缓冲区? 我的C++应用程序当前的工作如下: 1.它涉及启动另一个进程,并使用windows共享内存在两个进程之间进行通信。 2.数据在一个进程中序列化,在另一个进程中反序列化。但是,数据类型也可能根据用户输入而变化,因此该类型也会被序列化,以便反序列化程序能够正确解释数据,c++,serialization,deserialization,ipc,flatbuffers,C++,Serialization,Deserialization,Ipc,Flatbuffers,现在,我打算使用平面缓冲区来序列化和反序列化数据(因为它具有明显的优势——随机访问和向后兼容性)。 然而,要做到这一点,我需要在某些方面的明确性,并希望在这些方面得到一些帮助 根据数据类型,我可以通过编程生成模式,并将其提供给flatc.exe以生成文件。但是,我没有使用flatc.exe,而是考虑(从开源代码)构建flatc.dll,并使用它来简化交互。这听起来明智吗 其次,我更不确定的是以下几点。我将创建一个模式,并在应用程序运行时调用“平面缓冲区编译器”。它将生成一些C++文件。现在,据

现在,我打算使用平面缓冲区来序列化和反序列化数据(因为它具有明显的优势——随机访问和向后兼容性)。
然而,要做到这一点,我需要在某些方面的明确性,并希望在这些方面得到一些帮助

  • 根据数据类型,我可以通过编程生成模式,并将其提供给flatc.exe以生成文件。但是,我没有使用flatc.exe,而是考虑(从开源代码)构建flatc.dll,并使用它来简化交互。这听起来明智吗

  • 其次,我更不确定的是以下几点。我将创建一个模式,并在应用程序运行时调用“平面缓冲区编译器”。它将生成一些C++文件。现在,据我所知,我需要以某种方式构建这些文件,并且构建的二进制文件应该同时插入序列化程序和反序列化程序,以序列化和反序列化实际数据,而这一切都是在应用程序运行时进行的。我如何实现这一切
    这个问题都源于我的应用程序没有任何固定模式这一事实。当模式是可变的时,使用平面缓冲区的一般方法是什么


  • 我希望我清楚我想问什么。如果没有,请告诉我。我很乐意提供更多细节。提前感谢您的回答。

    答案是您不想要这个。虽然是可行的,尤其是C++的运行时生成,编译成一个DLL,然后将其加载到进程中是一个非常笨拙的方式。 程序的数据结构必须在编译时就知道(如果是用C++编写的),那么为什么不能只定义一次模式并提前编译呢?您的程序是否允许用户在运行时“设计”数据结构

    对于极其动态的用例,例如用户可以创建任意对象的情况,我建议使用FlexBuffers()。它们可以在FlatBuffer中用于存储“未知”数据,甚至可以作为自己的序列化格式。通过这些,您可以序列化结构在运行时只知道的对象,它们具有平坦缓冲区的大部分相同的效率属性,并且您不需要将C++编译器与程序捆绑在一起:
    最好是两者的结合,所有编译时已知数据都存储在FlatBuffers中,其余数据存储在FlexBuffers中。

    感谢您的回复。编译时不知道数据结构。这个特定上下文中的程序实际上是一个DLL。因此,DLL的入口点采用数据和相应构造的自定义数据类型。DLL为应用程序公开了一系列函数,以便能够构建该类型。因此,根据值类型,DLL的用户应用程序构造自定义类型,然后调用DLL并传递数据和自定义类型。DLL然后序列化数据和自定义类型。我打算在DLL中使用平面缓冲区进行序列化。