我正在尝试编写一个类,用于存储配置项及其名称,描述和类型。
OptionItem.h:
this.http.delete('http://localhost:3000/poems/delete' + ['1','3','4']);
OptionItem.cpp:
#include <typeinfo>
#include <string>
class OptionItem {
public:
OptionItem(std::string name, std::string text, type_info type);
std::string name() const;
std::string text() const;
type_info OptionItem::type() const;
private:
std::string _name, _text;
type_info _type;
};
我有第二堂课,讲了不同的选择:
选项h:
OptionItem::OptionItem(std::string name, std::string text, type_info type) :
_name(name), _text(text), _type(type) {};
std::string OptionItem::name() const { return _name; }
std::string OptionItem::text() const { return _text; }
type_info OptionItem::type() const { return _type; }
Opt.cpp:
#include "OptionItem.h"
struct Opt {
static const OptionItem opt1, opt2;
};
保存我的程序实际设置的第三个类如下:
Settings.h
#include "myOwnClass.h"
const OptionItem Opt::opt1= OptionItem("Option 1", "text1", typeid(std::string));
const OptionItem Opt::opt2= OptionItem("Option 2", "text2", typeid(myOwnClass));
Settings.cpp
#include "OptionItem"
#include <any>
#include <map>
#include <string>
class Settings {
public:
void setOption(OptionItem option, std::any value);
template<class T> T& getOption(const std::string &option) const;
private:
std::map<std::string, std::any> _options;
}
对void Settings::setOption(OptionItem option, std::any value) {
_options.emplace(option.name(), value);
}
T& Settings::getOption(const std::string &option) const {
if (_options.find(option) == _options.end()) {
throw(std::runtime_error("No such option \"" + option + "\"
}
else {
return std::any_cast<T>(_options[option]);
}
}
的调用可能如下所示:
Settings::getOption
我知道这有问题(这就是为什么我要问:-))第一个问题是getOption<Opt::opt1.type()>(Opt::opt1.name())
似乎不可复制。 (编译器(VIsualCPP)告诉我std::type_info
)。另一个问题,我肯定有很多我不知道的问题,因为编译因上述错误而停止。
您对我如何进行这项工作有任何建议吗?