我有一個C++項目QT開發。我正在運行的問題是我想要一個基類,我的所有屬性類都繼承,以便我可以將它們全部存儲在一起。現在,我有:C++財產類結構
class AbstractProperty
{
public:
AbstractProperty(QString propertyName);
virtual QString toString() const = 0;
virtual QString getName() = 0;
virtual void fromString(QString str) = 0;
virtual int toInteger() = 0;
virtual bool operator==(const AbstractProperty &rightHand) = 0;
virtual bool operator!=(const AbstractProperty &rightHand) = 0;
virtual bool operator<(const AbstractProperty &rightHand) = 0;
virtual bool operator>(const AbstractProperty &rightHand) = 0;
virtual bool operator>=(const AbstractProperty &rightHand) = 0;
virtual bool operator<=(const AbstractProperty &rightHand) = 0;
protected:
QString name;
};
然後我採取類如PropertyFloat和PropertyString和基於這樣的假設比較運營商,只有字符串被用繩子等相比,提供的實現。但是這個問題是不會有什麼錯誤編譯時拋出,如果我做了
if(propertyfloat a < propertystring b)
但是我實現運營商的每一個派生類依賴於他們兩個是相同的派生類。所以我的問題是我不知道如何實現一個屬性結構,以便我可以讓它們都從一些基本類型繼承,但代碼就像我上面會引發編譯時錯誤。
如何可以做到這一點任何想法?對於那些熟悉QT我也試過用用的QVariant一個實施然而的QVariant沒有運營商<和>只有在一些派生類的本身定義,因此它沒有工作了。
什麼我的最終目標是,是能夠泛指性。我有一個元素類,其中包含一個字符串'name'作爲鍵和AbstractProperty作爲值的屬性的散列圖。我希望能夠在屬性上進行一般操作。即如果我想獲得給定字符串名稱的屬性的最大值和最小值,我擁有完全通用的方法,將從每個元素中提取相關的AbstactProperty,並查找最大/最小值,而不管類型是什麼。所以屬性雖然最初聲明爲PropertyFloat/PropertyString,但它們將一般保持不變。
你在做什麼你的財產類?你從中得到什麼好處? – 2010-04-23 18:45:26