Boost ::具有复杂嵌套类的Interprocess

时间:2010-08-11 15:16:05

标签: c++ boost-interprocess

我认为我终于掌握了boost的基础知识:进程间库,在处理包含几个成员变量的相对简单的类时,我一直在成功使用它,这些类都是标准数据类型。

但是,我现在面临的问题是将一个相当复杂的类推送到进程间共享内存中,而我根本就没有运气。我希望这里有人可以提供帮助(或者可以引导我寻求替代解决方案)。把它剥离到我希望的基础,我有这样的东西:

// these first two classes are from the Gnu Scientific Library, so I can't  
// (or won't) be able to mess with the definition of these structures.  
typedef struct   
{  
    size_t size1;  
    size_t size2;  
    size_t tda;  
    double * data;  
    gsl_block * block;  
    int owner;  
} gsl_matrix;  

typedef struct   
{
    size_t size1;
    size_t size2;
    size_t tda;
    int * data;
    gsl_block_int * block;
    int owner;
} gsl_matrix_int;

class MyNumbersClass
{
    gsl_matrix_int* m_pIntMatrix;
    gsl_matrix*     m_pDblMatrix;
    unsigned int iVal1;
    unsigned int iVal2;
}

class MyOtherDataClass
{
    std::vector<int> m_vInputs;
    std::vector<double> m_vOutputs;
    std::string m_sTitle;
    bool m_bCorrect;
}

class SharedClass
{
    MyNumbersClass* m_pFirstNumbers;
    std::vector<double> m_vDblData;
    std::vector<MyOtherDataClass> m_vOtherData;
}

我需要做的是在进程间内存空间中创建一个SharedClass对象的向量,以便多个进程可以访问数据。无论我尝试什么,我似乎无法找到解决方案。看起来应该有一种比在进程间版本(interprocess :: vector,interprocess :: string,offset_ptr等)中使每个成员变量更简单的方法,但可能不是。即便如此,我也不确定如何处理所有分配器等,更不用说GSL库结构了。

帮助!

1 个答案:

答案 0 :(得分:0)

问题在于STL容器。正如您所猜测的,您需要使用boost :: interprocess容器。

例如,在使用字符串时,请参阅my answer here。 对于vector,请参阅this

干杯