1

次のように定義された 2 つのクラス A と B があるとします。

class A {
    map<int, int> mMap;
    vector<int> mVec;

    void method() {
      // do something with mMap and mVec 
    }
}

class B {
    map<int, double> mMap; // just an example of a map with a different signature

    ...
}

A が B に持っているすべてのものを何らかの方法で使用することは可能ですが、B で定義された新しいマップを使用し、書き換えずにmethod?

これは、私がやろうとしていることの単純化された例です: 新しいマップで大きなクラスをリファクタリングします。

4

1 に答える 1

1

使用したい場合

std::map<int, Y>

それ以外の

std::map<int, X>

同じコードで、に置き換えるclass Aには、タイプと。class Bの間に強い相関関係が存在する可能性があります。XY

この場合、でテンプレートを使用できない場合、考えられる回避策は、との両方にclass A暗黙の型変換演算子を定義することです。YXXY

class X {
    operator Y() {
        Y y;
        // Conversion logic
        return y;
    }
};

methodそうすることで、マップ上の挿入またはアクセス操作が暗黙の型変換演算子を自動的に呼び出すため、のコードを変更する必要はありません。

警告注:暗黙の変換演算子を乱用すると、コードの他の部分で予想されるコンパイラーの型安全性チェックが弱まります(例:間違ったYパラメーターがに渡されますf(X &x))。

于 2012-12-19T21:58:53.357 に答える