私はアレイに存在するかもしれない複数の処理単位を持っていて、それぞれが独自のパラメーターを持っています。私は、それがsolution to another questionとして示唆した後コンテキストパターンを用いて、各処理ユニットのパラメータを通信したいです。しかし、私はパターンのオンラインの簡単なC + +の例を見つけることができません。私はあなたの検査のために以下の簡単な実装を行いました。コードは正常に動作しコンパイルされますが、は正しくパターンを実装していますか?スタイル改良のためのすべての提案が大歓迎です。この「コンテキストパターン」の実装は正常ですか?
#include <iostream>
#include <sstream>
#include <map>
class cParamsContext
{
typedef std::map<std::string, float> myMap_t; //Make the return type of getter less wordy
myMap_t paramMap;
public:
cParamsContext()
{
paramMap["a0"] = 1.f;
paramMap["a1"] = 2.f;
}
myMap_t const& getMap() const {return paramMap;} //Return read-only alias
};
class cProcessUnit
{
float parameter;
int id;
public:
cProcessUnit(cParamsContext &contextObj, int id_) : parameter (0.f), id(id_)
{
std::stringstream idStream;
idStream << id;
std::string key = std::string("a" + idStream.str());
if(contextObj.getMap().find(key) != contextObj.getMap().end())
parameter = contextObj.getMap().find(key)->second; // https://stackoverflow.com/questions/10402354/using-overloaded-operator-via-an-accessor-function#10402452
}
float getParam() {return parameter;}
};
int main(int argc, char *argv[])
{
cParamsContext contextObj;
for (int nn=0; nn<3; nn++)
{
cProcessUnit temp(contextObj, nn);
std::cout << "Processing unit " << nn << " param = " << temp.getParam() << std::endl;
}
}
さらに、パラメータマップが変更された場合、各クラス内のパラメータを自分自身で更新できるようにする方法を提案できますか?あなたが興味を持っていた包み
出力は次のようになります。 。 。 。
Processing unit 0 param = 1
Processing unit 1 param = 2
Processing unit 2 param = 0
これは、コードレビューに行く必要があります。 –