0
* .xml 파일에서 설정을로드하는 구성 관리자 클래스를 C++ 11에서 구현하려고합니다.응용 프로그램 설정 관리를위한 C++ 11 클래스
이ConfigManager confManager;
confManager.initialize();
confManager.load();
auto& coreSettings = confManager.get<CoreSettings>();
coreSettings.windowOptions_.height_ = 800;
confManager.save();
더 간단한 구현이 될 것이다 :이 클래스를 사용하는 나에게 다음과 같은 코드를 작성할 수 있습니다 것
struct ConfigManager
{
ConfigManager(){}
void initialize()
{
add<CoreSettings>(std::make_unique<CoreSettings>("WhatEver.xml"));
}
template <typename T>
void add(std::unique_ptr<T> settings)
{
settings_.insert(std::make_pair(std::type_index(typeid(T)), std::move(settings)));
}
template <typename T>
T& get() const
{
auto it = settings_.find(std::type_index(typeid(T)));
return dynamic_cast<T&>(*it->second);
}
void load()
{
for (auto& s : settings_)
s.second->load();
}
void save()
{
for (auto& s : settings_)
s.second->save();
}
std::map<std::type_index, std::unique_ptr<ISettings>> settings_;
};
: 첫 번째 구현은 (내가 대신에만 쉽게 테스트를위한 클래스 구조체를 사용) :
struct ConfigManager : public IConfigManager
{
ConfigManager()
{
set_.insert(&coreSettings_);
}
virtual void load() final
{
for (auto& s : set_)
s->load();
}
virtual void save() final
{
for (auto& s : set_)
s->save();
}
virtual CoreSettings& getCoreSettings() final
{
return coreSettings_;
}
CoreSettings coreSettings_;
std::set<ISettings*> set_;
};
그러나이 방법은 내가 만들 모든 설정에 대해 많은 getter를 작성해야합니다.
더 나은 이유는 무엇이며 그 이유는 무엇이라고 생각하십니까? 어쩌면 이것이 어떻게 이루어져야하는지 전혀 아닙니다. 당신의 의견은 높이 평가됩니다.
나는 이것이 http://codereview.stackexchange.com/에서 더 잘 어울릴 것이라고 생각한다. –