我正在尝试将std::vector
类模板继承到我的membvec
类模板中public
。我希望将其用作例如。说membvec<float> mymemb(10)
,目的是创建包含membvec
元素的mymemb
变量10
。
但我无法弄清楚如何编写public
继承的模板化声明。我正在做的是以下,但都是徒劳的。
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)
...
};
答案 0 :(得分:2)
我认为您正在寻找类似下面的内容,但我们真的不这样做。如果您将课程作为其父std::vector
传递,则没有虚拟界面允许您的课程提供任何好处。如果您不需要替换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;
}
答案 1 :(得分:1)
也许你想要这样的东西:
#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;
}
};
然后您可以定期使用它:
int main()
{
membvec<char> foo;
foo + 3;
}