我該如何擴展模板類,例如向量?下面的代碼不起作用。編譯器抱怨'Vector'不是模板。擴展類模板
template <typename T>
class Vector<T> : public std::vector<T>
{
public:
void DoSomething()
{
// ...
}
};
我該如何擴展模板類,例如向量?下面的代碼不起作用。編譯器抱怨'Vector'不是模板。擴展類模板
template <typename T>
class Vector<T> : public std::vector<T>
{
public:
void DoSomething()
{
// ...
}
};
你的語法錯了;你需要使用:
template <typename T>
class Vector : public std::vector<T>
這就是說,你不應該通過繼承來擴展標準庫中的容器,如果沒有其他原因,則是因爲他們沒有虛析構函數,因此它本質上是不安全的。
如果你想「提升」 std::vector
,可能會使用成分(即與std::vector
類的成員變量),或使用非成員函數提供您的附加功能。
但是,如果您沒有虛擬成員,可以繼承STL容器嗎? – 2017-01-14 09:44:30
這與擴展另一個類無關。問題是您自己的派生類。
你定義一個類模板是這樣的:
template <typename T>
class Vector
{
...
,而不是
template <typename T>
class Vector<T>
{
...
jalfi是對的:class Vector
這是專業化的語法,因此編譯器期望看到'Vector'的基本模板。 – UncleBens 2010-04-29 13:31:54
你不應該從標準庫容器繼承。他們不是爲此而設計的。例如,他們沒有虛擬析構函數,所以如果你不小心,當你的派生向量被銷燬時,你的代碼將會中斷。 – jalf 2010-04-29 12:51:10