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我完全同意。如果你注意到,我在评论中写道,这是问题中的一个(我只是想展示如何构建它),但这是有问题的。啊,是的,我错过了。我输入的
通过引用返回
。我只是键入了一些东西,然后就解决了这个
声明问题。