나는 데이터를 사용하여 표준 변환하는 기능 ::지도를표준 : 맵 inizialitazion (한 번만)
struct HistoParameter
{
int nbins;
float first;
float last;
HistoParameter(int _nbins, int _first, int _last) :
nbins(_nbins), first(_first), last(_last) {};
};
HistoParameter* variable_to_parameter(char* var_name)
{
std::map<const std::string, HistoParameter*> hp;
hp[std::string("ph_pt")] = new HistoParameter(100,0,22000);
hp[std::string("ph_eta")] = new HistoParameter(100,-3,3);
// ...
return hp[var_name];
}
내 구조체는 매우 가벼운이지만, 이미지가 무거운 될 수 있습니다. 이 함수는 내가이 함수를 호출 할 때마다 HistoParameter 객체를 많이 생성한다는 점에서 스위치 케이스가 더 효율적일 수 있다는 점이 중요합니다. 첫 번째 질문 : 나는 쓰레기를 만들고 있습니까?
두 번째 솔루션 :
bool first_time = true;
HistoParameter* variable_to_parameter(char* var_name)
{
static std::map<const std::string, HistoParameter*> hp;
if (first_time)
{
hp[std::string("ph_pt")] = new HistoParameter(100,0,22000);
hp[std::string("ph_eta")] = new HistoParameter(100,-3,3);
// ...
}
first_time = false;
return hp[var_name];
은 괜찮습니다? 더 나은 솔루션?
같은 생각이지만, 당신은 make_pair에서 나를 때렸다. 그것이 _T- 밖에 밖에없는 것을 잊어 버렸습니다. –
나는 전역 변수를 사용할 수 없기 때문에 ht.empty()를 좋아한다. 나는이 클래스가 미래에 매우 다르고 무거워 질 수 있기 때문에 포인터를 사용하고 있습니다. –
캡슐화를 사용하는 주된 이유 중 하나는 필요할 때 언제든지 변경할 수 있습니다. 스마트 포인터를 사용하지 않으면 리소스 누출 문제가 발생합니다. 지도가 고정되어 있기 때문에 중요하지 않지만 여전히 ... –