C++ 如何在C+中的自定义类模板中继承std::vector模板+;11?
我正在尝试将C++ 如何在C+中的自定义类模板中继承std::vector模板+;11?,c++,c++11,inheritance,C++,C++11,Inheritance,我正在尝试将std::vector类模板作为public继承到我的membvec类模板中。我想使用它,例如说membvec mymemb(10),目的是创建包含10元素的membvec变量mymemb 但是我不知道如何编写公共继承的模板化声明。我所做的是以下几点,但都是徒劳的 template <typename T, template <typename T> class std::vector = std::vector<T>> //error above
std::vector
类模板作为public
继承到我的membvec
类模板中。我想使用它,例如说membvec mymemb(10)
,目的是创建包含10
元素的membvec
变量mymemb
但是我不知道如何编写公共继承的模板化声明。我所做的是以下几点,但都是徒劳的
template <typename T, template <typename T> class std::vector = std::vector<T>>
//error above: expected '>' before '::' token
class membvec: public std::vector<T>
{
const membvec<T> operator-() const; // sorry the previous version was a typo
//error above: wrong number of template arguments (1, should be 2)
...
};
模板
//上面的错误:在“::”标记之前应为“>”
类membvec:public std::vector
{
const membvec运算符-()const;//很抱歉,以前的版本是一个输入错误
//上面的错误:模板参数的数量错误(1,应该是2)
...
};
也许你想要这样的东西:
#include <vector>
template <typename T, template <typename T, class Allocator> class Vec = std::vector>
class membvec: public Vec<T, std::allocator<T>>
{
public:
// This is the signature in your question, but it's questionable.
const membvec<T, Vec> &operator+(int x) const
{
// You obviously want to change this.
return *this;
}
};
#包括
模板
类membvec:公共Vec
{
公众:
//这是你问题中的签名,但有问题。
常量membvec和运算符+(int x)常量
{
//你显然想改变这一点。
归还*这个;
}
};
然后,您可以定期使用它:
int main()
{
membvec<char> foo;
foo + 3;
}
intmain()
{
membvec foo;
foo+3;
}
我认为您正在寻找类似以下内容的内容,但请认真不要这样做。如果您将类作为其父类传递,则没有虚拟接口允许您的类提供任何好处。如果您不需要替换std::vector
,那么就不需要从它继承。更喜欢使用自由函数算法,或者在类中包含std::vector
#include <vector>
template <typename T>
class membvec: public std::vector<T>
{
// Don't need <T> in class scope, must return by value.
membvec operator+() const;
};
int main()
{
membvec<int> foo;
}
#包括
模板
类membvec:public std::vector
{
//不需要在类范围内,必须按值返回。
membvec算子+()常数;
};
int main()
{
membvec foo;
}
您可能需要阅读。您真的需要从std::vector继承吗?您需要从vector继承的原因是什么?通常情况下,只需添加全局自由函数即可扩展其功能。是的,我想将其提供给另一个函数,该函数需要在泛型std::vector
操作之外定义加法、减法、乘法和除法运算符。这太复杂了。唯一需要的模板参数是T
。但我认为您根本不需要公共继承。smql,在这种情况下,您真的不需要任何东西,只需要一个t,正如@juanchopanza所说的。我想,您也希望能够使用其他容器,但如果将其设置为vector,则只需模板类membvec:public std::vector
@juanchopanza我完全同意。如果你注意到,我在评论中写道,这是问题中的一个(我只是想展示如何构建它),但这是有问题的。啊,是的,我错过了。我输入的通过引用返回。我只是键入了一些东西,然后就解决了这个声明问题。