我有多个处理单元可能存在于一个数组中,每个处理单元都有自己的参数。我想使用以下方式传达每个处理单元的参数上下文模式在它被建议作为另一个问题的解答 https://stackoverflow.com/questions/10398852/is-there-a-recommended-design-pattern-for-communicating-parameters-with-a-proces。但是,我无法在线找到该模式的简单 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
至于更新值,我目前正在一个分配给我的项目中做一些非常类似的事情,并且我正在使用观察者模式 http://en.wikipedia.org/wiki/Observer_pattern. The cParamsContext将是可观察到的在这种情况下。我正在使用一个信号/槽/事件/委托 https://stackoverflow.com/questions/359928/观察者模式的实现。到目前为止,它为我的任务创造了奇迹。