将在一类中创建的多地图数据传递给另一类

时间:2019-04-01 10:26:03

标签: c++ visual-c++

很抱歉,这是一个小问题。

我正试图将已与库中的一个类放在一起的多图传递给该库中的另一个类,以进一步处理那里的数据。

代码与其他人编写的GUI有关,此处的类与GUI中的两个不同工具有关。

非常粗略地讲我的代码,我在这里想要的是这样

class A
{
private:
    std::multimap<int, double> mMap;
    int anInt;
    double aDouble;
    ***some more definitions***
public:
    void aFunction(***openscenegraph node, a string, and a parser function***)
    {
        ***a few definitions are declared and initialised here 
        during calculations***
        ***some code calculating data stuff that 
        passes bits of that data to mMap (including information 
        initialised within the function)***
    }
}

class B
{
public:
    void bFunction(***openscenegraph node and some other data***)
    {
        ***I want to be able to access all the data in mMap here***
    }
}

请问有人可以告诉我我该怎么做吗?

编辑:添加该内容是为了阐明我的目标

        //Edit by Monkone
        //section below is akin to what I'm trying to do
        class B
        {
        private:
            std::multimap<int, double> mMapb;
        public:
            std::multimap<int,double> bFunction2(A::MultiMapDataType data)
            {
                return mMap;
            }
            void bFunctionOriginal()
            {
                ***I want to be able to access all the data in mMap here***
                ***i.e. mMapb.bFunction2(mMap);***
                ***do stuff with mMapb***
            }
        }

但是我什么都做不到这样的事情

2 个答案:

答案 0 :(得分:1)

  

我不需要在地图上工作,只需从地图上获取信息即可。

然后您可以添加一个函数以返回对映射的const引用,并添加用于将const迭代器返回至A的函数:

class A {
public:
    typedef std::multimap<int, double> intdoublemap_t;
    typedef intdoublemap_t::const_iterator const_iterator;
    // typedef intdoublemap_t::iterator iterator;

private:
    intdoublemap_t mMap;

public:
    // direct access to the whole map
    const intdoublemap_t& getMap() const { return mMap; }

    // iterators
    const_iterator cbegin() const { return mMap.begin(); }
    const_iterator cend() const { return mMap.end(); }
    const_iterator begin() const { return cbegin(); }
    const_iterator end() const { return cend(); }

    /*
    iterator begin() { return mMap.begin(); }
    iterator end() { return mMap.end(); }
    */
};

现在,您可以从外部(从B)遍历地图:

void bFunction(const A& a) {
    for(A::const_iterator it = a.begin(); it!=a.end(); ++it) {
        std::cout << it->first << " " << it->second << "\n";
    }
}

或直接访问地图:

void bFunction(const A& a) {
    const A::intdoublemap_t& mref = a.getMap();
    //...
}

答案 1 :(得分:0)

其他类(非朋友类)无法访问C ++ private成员。 第一个解决方案是将mMap保持私有状态(不礼貌地与其他班级成员合作),并为其提供评估人员。

      class A
        {
        public:
            typedef std::multimap<int, double> MultiMapDataType;
        private:
            MultiMapDataType mMap;
            ***some more definitions***
        public:
            const MultiMapDataType& getConstMMap() const;
            MultiMapDataType getMMap();

    }

    class B
    {
    public:
        void bFunction(A::MultiMapDataType data)
        {
            ***I want to be able to access all the data in mMap here***
        }
        void bFunction2(const A::MultiMapDataType& data)
        {
            ***I want to be able to access all the data in mMap here***
        }
    }

    A a;
    B b;
    b.bFunction(a.getMMap());
    b.bFunction2(a.getConstMMap());

但是,从体系结构的角度来看,如果您需要共享多个成员,则应将它们全部移动到封装该功能的新结构/类中。