私は汎用の C++のパラメータチェッカーで、オプションを追加して内容を解析できるようにしています。C++の汎用パラメータチェッカー
class Param
{
public:
Param();
~Param();
template <typename T>
void add_option(std::string, std::string, T&); // flag, description, storage value
protected:
std::map<std::string, IOption> options;
};
template <typename T>
void Param::add_option(std::string, std::string, T&) // Is templated to add an option depending on its type
{}
template<> void Param::add_option<int>(std::string, std::string, int &);
template<> void Param::add_option<std::string>(std::string, std::string, std::string &);
あなたは私がmap
に新しいオプションを保存したい見ることができるように、ここではクラスのオプションがあり、それは「インターフェース」です:
template <typename T>
class Option : public IOption
{
public:
Option(std::string flag, std::string desc, T &ref) : flag_(flag), desc_(desc), ref_(ref) {}
~Option() {}
std::string getFlag()
{
return (flag_);
}
protected:
std::string flag_;
std::string desc_;
T &ref_;
};
class IOption
{
public:
virtual ~IOption() {}
IOption() {}
virtual std::string getFlag() = 0;
};
ここ
は私Param
クラスですこのインタフェースを作成したのは、テンプレート化されていてもマップにオプションを格納するためです。
しかし
フィールドタイプ「IOptionは」何私からジェネリックパラメータチェッカーを作成するための最良の方法だろう何
抽象クラスであるため、今、私はコンパイルできませんC++で持っている?
IOptionのポインタを格納しますか? std :: map 詳細はこちらhttp://stackoverflow.com/questions/15188894/why-doesnt-polymorphism-work-without-pointers-references –
SnoozeTime
@SnoozeTime、またはさらに良い[スマートポインタ](http://en.cppreference.com/w/cpp/memory/unique_ptr) – StoryTeller