Ich arbeite an einem generischen Parameterprüfer in C++, der Optionen hinzufügen und ihren Inhalt analysieren kann.Generischer Parameterprüfer in C++
Hier ist meine Param
Klasse:
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 &);
Wie Sie möchte ich speichern neue Optionen in einem map
sehen können, hier ist die Klasse Option und es ist "Schnittstelle":
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;
};
Der Grund, warum ich diese Schnittstelle erstellt habe, besteht darin, meine Optionen in der Map zu speichern, obwohl sie als Vorlage dienen.
Aber jetzt kann ich nicht kompilieren, weil
Feldtyp ‚iOption‘ eine abstrakte Klasse ist
Was ist der beste Weg, um einen generischen Parameter checker von dem, was ich wäre zu schaffen in C++ haben?
Zeiger der IOption speichern? std :: map Weitere Informationen hier http://StackOverflow.com/Questions/15188894/Why-doesnt-Polymorphism-Work-without-Pointers-References –
SnoozeTime
@SnoozeTime oder noch besser [ Smart Pointer] (http://en.cppreference.com/w/cpp/memory/unique_ptr) – StoryTeller