我制作了一个通用的属性模板。每个属性只有一个值,例如float,int,string等。当实例化属性时,它会尝试使用属性管理器singleton注册自己。但是,我无法弄清楚如何使PropertyManager :: AddProperty()方法获取属性。它通过一条消息声明该属性需要一个类型名称来保持错误。这通常是怎么做的?
template <typename T> class Property
{
public:
Property(T value)
{
mID = ThePropertyManager->AddProperty( Property* p );
}
T mValue;
ULONG mID;
}
答案 0 :(得分:0)
此
mID = ThePropertyManager->AddProperty( Property* p );
语法无效,有两种方式,需要
mID = ThePropertyManager->AddProperty(this);
如果没有看到其他代码,很难确定,但只要AddProperty
本身是模板化的,那么这应该可行。
此外,您可能希望在构造函数中初始化mValue
,即
Property(T value) : mValue(value)
{
...
}
答案 1 :(得分:0)
PropertyManager类可以具有模板成员函数,该函数采用Property的各种实例化:
class PropertyManager
{
public:
template <class TY> ID AddProperty(Property<Ty>&);
};
另请注意,示例代码不正确:
mID = ThePropertyManager->AddProperty( Property* p );
应该是这样的:
mID = ThePropertyManager->AddProperty(this);
答案 2 :(得分:0)
你可以从一个抽象基类继承Property
,比如没有模板化类型的AbstractProperty
,然后让PropertyManager
接受AbstractProperty
个参数。如果您将Property
与整数,浮点数等一起使用,这也将支持多个Property
模板化类。
虽然听起来好像你需要一个模板化的物业经理。