性能在我的应用程序中至关重要
我需要类似的东西std::experimental::dynarray http://en.cppreference.com/w/cpp/container/dynarray,因此数组的大小在运行时决定。
所以我考虑使用包装类std::vector
,提供其所有功能,但无法调用resize
, reserve
or push_back
。简而言之,所有改变其大小的方法(如果我错过了其中一些,请提醒我)。
所以我开始写这门课:
CCVector.hpp
:
template <typename T>
class CCVector{
public:
CCVector(size_t size);
T &operator[](typename std::vector<T>::size_type idx);
private:
std::vector<T> v;
};
CCVector.cpp
:
template<typename T>
CCVector<T>::CCVector(size_t size) : v(size){}
template<typename T>
T& CCVector<T>::operator[](typename std::vector<T>::size_type idx){
return v[idx];
}
但我认为我必须重新实施every
的方法std::vector
我需要的!例如begin
, end
, size
等等,我不知道如何实现所有这些......此外,这对维护来说真的很糟糕:一旦我需要一个新方法std::vector
我需要重新实现它CCVector
.
所有这一切都是因为我想要在运行时固定大小的数组。在不使用非标准的情况下如何解决这个问题std::experimental::dynarray
?
使用私有继承,然后使用using
声明将您想要的名字引入您的班级。
template<class T>
class MyVector : private std::vector<T>
{
public:
using std::vector<T>::end;
// etc
};
(使用私有继承,您不会遇到向量没有虚拟析构函数的问题,这就是大多数人不喜欢从标准容器继承的原因)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)