Anz*_*rio 7 c++ vector c++11 array-view
我有一个template<typename T>
功能,需要一个const vector<T>&
.在说的功能,我有载体cbegin()
,cend()
,size()
,和operator[]
.据我了解,双方string
并vector
用连续的空间,所以我在想,如果我能在一个优雅的方式重新使用两种数据类型的功能.
可以std::string
重新解释为std::vector
(适当的)char_type吗?如果是这样,限制是什么?
无法保证布局string
和vector
将是相同的.它们理论上可能是,但它们可能不是任何常见的实现.因此,你不能安全地做到这一点.请参阅Zan的答案以获得更好的解决方案.
让我解释一下:如果我是一个标准的库实现者,并决定像这样实现std :: string ....
template ...
class basic_string {
public:
...
private:
CharT* mData;
size_t mSize;
};
Run Code Online (Sandbox Code Playgroud)
并决定像这样实现std :: vector ...
template ...
class vector {
public:
...
private:
T* mEnd;
T* mBegin;
};
Run Code Online (Sandbox Code Playgroud)
当您reinterpret_cast<string*>(&myVector)
最终将指向数据末尾的指针解释为指向数据开头的指针,并将指向数据开头的指针解释为数据大小.如果成员之间的填充不同,或者有额外的成员,它甚至可能变得更加怪异,也更加破碎.
所以,是的,为了使它们可能工作,它们都需要存储连续的数据,但是它们还需要相当多的其他工具才能实现相同的工作.