gpt4 book ai didi

c++ - 这个 "Context Pattern"的实现看起来没问题吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:55:32 27 4
gpt4 key购买 nike

<分区>

我有多个处理单元,它们可能存在于一个数组中,每个处理单元都有自己的参数。在被建议为 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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com