我正在尝试制作一个Template
可以存储模板值的 C++ 类。但是,我需要在知道模板值的类型之前创建指向此类的指针。为此,我创建了一个Base
模板类继承自的抽象类。我创建指向 的指针Base
,当它们被分配时,我使用basePtr = new Template<TYPE>
.
这里的问题在于给Template
. 我能想到的每一种方法(我想使用重载的赋值运算符)都需要一个带有模板数据类型的方法作为形式参数。因为Template
对象只能通过Base
指针访问,所以我必须在Base
. 但是,虚方法不能包含模板数据类型,并且Base
' 签名中的虚方法必须与Template
' 方法匹配。
这是我要做的一个例子:
class Base {
public:
/* THIS IS ILLEGAL - can't have template virtual method
template <class V>
virtual void operator =(const V& newValue) = 0;
*/
};
template <class ValueType>
class Template : public Base {
private:
ValueType *value;
public:
void operator =(const ValueType& newValue) {
*value = newValue;
}
};
int main() {
Base *theObject; // Datatype for template not known
theObject = new Template<string>; // At this point, it will be known
// NOW, THIS DOESN'T WORK - no virtual assignment overload in Base
*theObject = "Hello, world!";
return 0;
}
如果我以完全错误的方式进行此操作,并且如果我的方法很愚蠢,我深表歉意——这是我第一次尝试真正的 OOD。有没有办法解决我没有看到的这个问题?我知道我可以创建一长串纯虚函数,Base
用不同的输入类型重载赋值运算符,如下所示:
virtual void operator =(const string& newValue) = 0;
virtual void operator =(const int& newValue) = 0;
virtual void operator =(const long& newValue) = 0;
...
但是,我希望用户能够在Template::value
.