我有一个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