В настоящее время я пишу класс, который позволяет получать и устанавливать параметры внутренней программы, и он должен быть достаточно гибким и простым в использовании.
В частности, опция идентифицируется типом перечисления и типом значения, которые имеют отношение один к одному. Например, enum IntType будет содержать опции типа int .
Я имел в виду следующий код, но понятия не имею, как заставить его работать или пытаюсь ли я использовать шаблоны так, как не следует.
enum IntType {OPTION1, OPTION2}
enum StringType { OPTION3, OPTION4}
template<class T, class T2>
class Policy{
public:
T2 getValue(const T& a);
void setValue(const std::string& name, const T2& a);
...
}
class A: public Policy<IntType, int>, public Policy<Stringtype, std::string>, ...{
...
}
Каждая константа перечисления имеет одно связанное строковое представление, которое является константой, но опции также принимаются как ввод строки в программу, поэтому я должен иметь возможность определить из строки, какую опцию мне следует изменить.
Но, очевидно, этот код нельзя использовать для прямого вызова set или получения значений без определения его полной специализации шаблона. Так
A* a = ...
a->setValue("intoption", 5);
не будет работать.
Какие-нибудь указатели на то, что я должен использовать, чтобы заставить это работать?
Частичный ответ о том, как получить во время компиляции, что OPTION1 отображается на int и IntType, ... также был бы хорош.
Спасибо заранее,
Broes