同一个类使用的映射引用类

Map referencing class used by same class

本文关键字:映射 引用 同一个      更新时间:2023-10-16

我有一个类,它需要保存所有对象的引用列表。例如:

//A.cpp
class A {
    A() {}
    someMethod() {}
    someOtherMethod() { mapA[0]->someMethod(); }
}
//main.cpp
#include <map>
std::map<int, A*> mapA;
int main(int argc, char const *argv[]) {
    int count = 0;
    A* a = new A();
    mapA[count] = a;
    count++;
}

但是,由于mapA只全局于main.cpp, A.cpp不能引用它。我尝试使用extern,但因为map使用相同的A类,我不知道把它放在哪里。

做这件事最好的方法是什么?

您可以在构造函数中注册它们,并在类中创建静态变量:

// a.hpp
class A {
public:
    A() { as.insert(this); }
    A(const A& rhs) { as.insert(this); }
    ~A() { as.erase(this); }
    static std::set<A*> as; // Declaration
};
// a.cpp
std::set<A*> A::as; // Definition