我想我终于掌握了boost:interprocess库的基础知识,并且在处理包含几个都是标准数据类型的成员变量的相对简单的类时,我已经成功地使用了它。

但是,我现在面临着将一个相当复杂的类推入进程间共享内存的问题,我一点也没有运气。我希望这里有人可以提供帮助(或可以引导我寻求其他解决方案)。归结为我希望的基础知识,我大致遵循以下几点:

// 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对象的 vector ,以便多个进程可以访问数据。无论我尝试什么,我似乎都找不到解决方案。似乎应该有比在进程间版本中使每个单个成员变量(interprocess::vector,interprocess::string,offset_ptr等)更简单的方法,但也许不是。即使到那时,我也不确定如何处理所有分配器,更不用说GSL库结构了。

救命!

最佳答案

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

有关使用字符串的示例,请参见my answer here
有关 vector ,请参见this

干杯

关于c++ - Boost::Interprocess与复杂的嵌套类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3459901/

10-11 15:51