性能对我的应用至关重要
我需要类似 std::experimental::dynarray
的东西, 所以一个数组的大小是在运行时决定的。
所以我考虑为 std::vector
使用一个包装类,提供其所有功能,但无法调用 resize
、reserve
或 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];
}
但在这一点上,我认为我必须重新实现我需要的 std::vector
的 every
方法!比如begin
, end
, size
等等,我都不知道怎么实现了...另外,这真的是不利于维护:只要我需要来自 std::vector
的新方法,我就需要在 CCVector
中重新实现它。
所有这些都是因为我想要在运行时固定大小的数组。如何在不使用非标准 std::experimental::dynarray
的情况下解决这个问题?
最佳答案
使用私有(private)继承,然后使用using
声明导入你想要的函数,将你想要的名字引入你的类。
template<class T>
class MyVector : private std::vector<T>
{
public:
using std::vector<T>::end;
// etc
};
(通过私有(private)继承,您不会遇到 vector 没有虚拟析构函数的问题,这是大多数人不喜欢从标准容器继承的原因)
关于c++ - 运行时固定大小的 std::vector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42672504/