我正在使用特定的類庫。所有可用的值類都是從基類派生的。有標量類型如何爲非創建類創建包裝?
oaBooleanValue : public oaValue
oaIntValue : public oaValue
oaFltValue : public oaValue
oaStringValue : public oaValue
前3個類定義方法get()作爲返回值。第四類定義爲獲取參考。
oaBoolean get() const;
oaInt get() const;
oaFloat get() const;
void get(oaString& value) const;
我需要在我的模板包裝類中統一使用所有4個類。 我寫了如下的輔助oaStringValueGetter類。但是有問題。基類oaValue限制默認構造函數和複製構造函數。只有一種通過使用靜態'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'是否有任何公共構造函數? – 2013-04-23 17:43:21
你說得對。用給定的條件編寫「class oaStringValueGetter:public oaStringValue」是不可能的。我以不同的方式解決了我的任務。 – 2013-05-23 10:32:50