Инициализация public/protected
членов базового класса внутри конструктора производного класса не разрешена по текущему стандарту.Надо полагаться на другие методы, чтобы достичь этого.Есть 2 способа решения вашей проблемы.
(1) Объявите метод virtual
, возвращающий std::string
для соответствующей метки / значений.Однако это приведет к ненужным накладным расходам.Из вашей реализации я могу понять, что вы хотите этого избежать.
(2) Используйте промежуточный класс template
, который сделает это за вас.
enum eValue { OHM, FARAD, AMP }; // enum to string mapping
static const string sValue[] = { "ohm", "farad", "amp" };
// make the 'value' as reference string; to avoid making multiple copies
class Base {
Base (const string &v) : value(v) {}
public: const string &value; // has to be accessed using object
};
template<eValue TYPE>
struct Link : Base { // this is an intermediate class for every derived
Link () : Base(sValue[TYPE]) {}
};
class Resistance : public Link<OHM> {
};