我剛剛開始使用C++模板,僅僅是因爲我想了解與其他語言(Java)的具體差異,並且我達到了一個他們開始發散的點,但我不是得到我應該如何解決具體問題(或解決它)。C++模板 - 具有模板類型的泛型方法
假設我有一個通用的值類,如
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);
};
(我知道這是也可以使用template <>
但因爲我指定類型的特定代碼仍然需要使用它足以理解它,我剛剛由自己的Int類定義,這不過是一個typedef Value<int>
到底)
是否有可能讓我們說可以存儲任意指向Value
實例的指針的集合?不需要指定泛型類的具體具體類型。
從我所瞭解的模板只是一個編譯時問題,編譯器會分析所有使用該模板的具體類型,併爲它們中的每一個編譯相同方法的不同版本,因此我試圖似乎不可能(在Java中,我允許使用通配符來表示List<Value<?>>
)。我錯了嗎?
是否有一個常見的設計來解決這個問題,或者我被迫放棄模板來實現它?
是,有'價值'從一個普通的類型繼承。 – andre