我开始使用 C++ 模板只是因为我想了解与其他语言(Java)的具体差异,并且我达到了它们开始分歧的地步,但我不知道我应该如何解决具体问题(或绕过它)。
假设我有一个通用值类,例如
template <class T>
class Value
{
protected:
T value;
public:
Value(Type type, T value) : type(type), value(value) {}
void set(T value) { this->value = value; }
T get() const { return this->value; }
T clone() { return new Value<T>(type, value); }
virtual string svalue() const = 0;
const Type type;
};
和一个特定的子类型:
class Int : public Value<int>
{
public:
Int(int value) : Value<int>(INT, value) { };
virtual string svalue() const { ... }
friend ostream& operator<<(ostream& os, const Int& v);
};
(我知道也可以通过 using 指定特定于类型的代码,template <>
但由于我仍然需要使用它来理解它,所以我现在只是由自己的 Int 类定义,这Value<int>
最终只不过是 typedef)
比方说,是否有可能拥有一个能够存储指向Value
实例的任意指针的集合?无需指定泛型类的具体具体类型。
据我了解,模板只是一个编译时问题,编译器分析使用模板的所有具体类型,并为它们中的每一个编译相同方法的不同版本,因此我想要做的不是似乎是可能的(在 Java 中,我可以使用通配符来表示类似的东西List<Value<?>>
)。我错了吗?
是否有解决此问题的通用设计,或者我被迫放弃模板来实现它?