0

我制作了一个通用属性模板。每个属性只有一个值,例如float、int、string等。并且当属性被实例化时,它会尝试将自己注册到属性管理器单例中。但是,我不知道如何使 PropertyManager::AddProperty() 方法获取该属性。它不断出错并显示一条消息,指出该属性需要一个类型名。这通常是如何完成的?

template <typename T> class Property
{
public:
    Property(T value)
    { 
        mID = ThePropertyManager->AddProperty( Property* p ); 
    } 
        T mValue;
    ULONG mID;
}
4

3 回答 3

0

这个

    mID = ThePropertyManager->AddProperty( Property* p ); 

在两种情况下是无效的语法,它需要是

    mID = ThePropertyManager->AddProperty(this); 

如果没有看到您的其余代码,很难确定,但只要AddProperty它本身是模板化的,那么这应该可以工作。

您可能还想mValue在构造函数中进行初始化,即

Property(T value) : mValue(value)
{ 
    ...
} 
于 2012-08-13T16:50:28.993 回答
0

PropertyManager 类可以有一个模板成员函数,该函数接受各种属性的实例化:

class PropertyManager
{
public:
    template <class TY> ID AddProperty(Property<Ty>&);
};

另请注意,示例代码不正确:

mID = ThePropertyManager->AddProperty( Property* p );

应该是这样的:

mID = ThePropertyManager->AddProperty(this);
于 2012-08-13T16:50:48.387 回答
0

您可以Property从抽象基类继承,说它AbstractProperty没有模板类型,然后PropertyManager接受AbstractProperty参数。如果您同时使用整数、浮点数等,这也将支持多个Property模板类。Property

尽管听起来您确实需要一个模板化的 Property Manager。

于 2012-08-13T16:52:08.090 回答