2016-08-22 11 views
1

私はすべてのオブジェクトの参照リストを保持する必要があるクラスを持っています。たとえば :mapAmain.cppにのみグローバルであるため、同じクラスで使用されているマップ参照クラス

//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++; 
} 

しかし、A.cppはそれを参照することはできません。私はexternを使ってみましたが、mapは同じクラスAを使用しているので、どこに置くべきかわかりません。

これについてはどのような方法が最適ですか?あなたは、コンストラクタでそれらを登録し、クラスの静的VARを作るかもしれない

+0

は、ビット欠陥のあるデザインのように見えます。まず第一に、マップに格納されている生ポインタをなぜ使用していますか?あなたの実際の要件とユースケースについてもう少し説明してもらえますか?あなたが解決しようとしているXY問題のように少し聞こえます。 –

+0

@πάνταῥεῖ私は基本的な 'deposit()'と 'withdraw()'メソッドを使って銀行システムを書いています。しかし、私は 'transfer()'も持っています。これはどの銀行の口座間でもお金を移します。だから、私は銀行が既存のすべての銀行を追跡するようにしたいのです。 ABAのようなもの。 – drum

+0

これらの 'transfer()'操作を行うためのインターフェイスを提供する、すべてのアカウントの上位コンテナクラスを持つことはどうでしょうか?おそらく、そのような種類のビジネスロジックを外部化する必要があります。また、生のポインタを扱うべきではなく、代わりに[スマートポインタ](http://en.cppreference.com/w/cpp/memory)を用意してください。 –

答えて

1

// 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 
+0

ええと、これは主要な問題を解決しますが、これは本当に解決する問題ですか? –

+0

私はBTWをしなかった!ちょうど反対投票を投じた。 –

+0

@πάνταῥεῖ:コレクションのすべてのインスタンスを保持する有効なケースがいくつかあると思います。それはOPのケースではないようです... – Jarod42

関連する問題