Я работаю с определенной библиотекой классов. Все доступные классы значений производятся из базового класса. Существуют скалярные типыКак создать оболочку для не-создаваемого класса?
oaBooleanValue : public oaValue
oaIntValue : public oaValue
oaFltValue : public oaValue
oaStringValue : public oaValue
Первые 3 класса определяют метод get() как возвращаемое значение. И 4-й класс определяет, как взять ссылку.
oaBoolean get() const;
oaInt get() const;
oaFloat get() const;
void get(oaString& value) const;
Мне нужно использовать все 4 класса в классе шаблона шаблона. Я написал дополнительный класс oaStringValueGetter, как показано ниже. Но есть проблема. Базовый класс oaValue ограничивает конструктор по умолчанию и copy-constructor. Существует только один способ создания экземпляров с помощью статического метода create().
Есть ли способ добавить некоторые методы приведения типов к моему классу, чтобы он автоматически преобразовывался из oaStringValue?
class oaStringValueGetter : public oaStringValue
{
public:
oaString get() const
{
oaString str;
oaStringValue::get(str);
return str;
}
};
А вот частичное определение класса из библиотеки, для справки
class oaObject {
public:
// public methods are here
protected:
~oaObject();
private:
oaObject();
oaObject(const oaObject& obj);
oaObject& operator=(const oaObject& obj);
};
class oaValue : public oaObject {
public:
void destroy();
oaBoolean isEqual(oaValue *value) const;
oaValue *copy() const;
};
class oaString; // library-defined custom string class
class oaStringValue : public oaValue {
public:
static oaStringValue* create(oaObject* database, const oaString &value);
void get(oaString& value) const;
void set(const oaString& value);
};
typedef int oaInt4;
class oaIntValue : public oaValue {
public:
static oaIntValue* create(oaObject* database, oaInt4 value);
oaInt4 get() const;
void set(oaInt4 value);
};
Если класс ограничивает все его конструкторы, невозможно подклассифицировать его. Есть ли у 'oaValue' какие-либо публичные конструкторы? –
Вы правы. Невозможно написать «class oaStringValueGetter: public oaStringValue» с заданными условиями. Я решил свою задачу по-другому. –