C++ 如何使非模板化管理器接受模板化对象?
我制作了一个通用属性模板。每个属性只有一个值,例如float、int、string等。当该属性被实例化时,它会尝试向属性管理器单例注册自身。但是,我不知道如何使PropertyManager::AddProperty()方法获取该属性。它不断出错,并显示一条消息,说明属性需要一个typename。这通常是如何做到的C++ 如何使非模板化管理器接受模板化对象?,c++,templates,C++,Templates,我制作了一个通用属性模板。每个属性只有一个值,例如float、int、string等。当该属性被实例化时,它会尝试向属性管理器单例注册自身。但是,我不知道如何使PropertyManager::AddProperty()方法获取该属性。它不断出错,并显示一条消息,说明属性需要一个typename。这通常是如何做到的 template <typename T> class Property { public: Property(T value) { m
template <typename T> class Property
{
public:
Property(T value)
{
mID = ThePropertyManager->AddProperty( Property* p );
}
T mValue;
ULONG mID;
}
模板类属性
{
公众:
属性(T值)
{
mID=属性管理器->添加属性(属性*p);
}
T值;
乌龙中路;
}
这个
在两个方面都是无效语法,需要
mID = ThePropertyManager->AddProperty(this);
如果看不到代码的其余部分,就很难确定,但是只要AddProperty
本身是模板化的,那么这应该可以工作
您可能还想在构造函数中初始化mValue
,即
Property(T value) : mValue(value)
{
...
}
PropertyManager类可以具有一个模板成员函数,该函数接受属性的各种实例化:
class PropertyManager
{
public:
template <class TY> ID AddProperty(Property<Ty>&);
};
应该是这样的:
mID = ThePropertyManager->AddProperty(this);
您可以让
Property
从抽象基类继承,比如说AbstractProperty
没有模板类型,然后让PropertyManager
接受AbstractProperty
参数。如果将Property
与int、float等一起使用,这也将支持多个Property
模板化类
尽管听起来您确实需要一个模板化的属性管理器。PropertyManager需要从
属性访问哪些操作问题是调用类型擦除,但执行方法可能取决于您需要如何处理属性
让管理者接受任何内容可能很困难。Hoh,使用模板化的属性管理器意味着什么?我的结局不是不止一个吗?我只想要一个物业经理,所以我想不惜一切代价避免这样做。但是回到你的另一个建议,使用抽象属性类,我喜欢这个想法。我要试试看。如果不知道“物业经理”应该做什么,就真的不可能给出一个有用的答案。抽象基类可能是解决方案,但这取决于问题所在。>哦,使用模板化属性>管理器意味着什么?我的结局不是不止一个吗?也许,避免不止一个会有点复杂。马蒂!你给了我正确的答案!它现在起作用了:)我会投你一票,但它说我需要超过15分才能做到。无论如何,谢谢你,伙计@user1527741您可以始终接受答案,并且它将为其提供绿色复选框AddProperty函数是一个成员函数。在不将整个PropertyManager模板化的情况下,我仍然可以将其模板化吗?@user1527741当然可以。您必须小心语法,以及.cpp
vs.h
文件中的内容,但请参见。
mID = ThePropertyManager->AddProperty( Property* p );
mID = ThePropertyManager->AddProperty(this);