我想为我的运算符std::vector
[]
的类
template<class T>
class MyVector : public std::vector<T>
{
public:
// ?...
const T &operator[](size_t index) const
{
//...
}
T &operator[](size_t index)
{
//...
}
};
int main()
{
MyVector<int> myVec = { 1, 2, 3 };
//...
}
我该如何导出所有std::vector
构造函数并为C ++ 11分配运算符?
答案 0 :(得分:2)
通常这是个坏主意。
首先,因为如果某人对$.get("page.aspx", function (data){
$("#id").after(data);})
如此愚蠢,然后将其存储在new MyVector<int>
中,然后通过该指针删除,则您拥有UB。但这是一个非常愚蠢的用例。在std::vector<int>
上使用new
确实是不好的代码味道。
第二,因为它似乎毫无意义且令人困惑。
但是你可以做到。
std::vector
现在,此不支持template<class T>
class MyVector : public std::vector<T>
{
public:
using std::vector<T>::vector;
using std::vector<T>::operator=;
MyVector(MyVector const&)=default;
MyVector(MyVector &&)=default;
MyVector& operator=(MyVector const&)=default;
MyVector& operator=(MyVector &&)=default;
const T &operator[](size_t index) const
{
//...
}
T &operator[](size_t index)
{
//...
}
};
中的构建。
std::vector<T>
涵盖了一些最后的情况。
这不是完全透明的,但涵盖了99.9%的案件。