如何包装多级原始指针以赋予其容器语义
How to wrap multi level raw pointers to give it container semantics
如何包装T**
以赋予其std::vector<std::vector<T>>
语义?到目前为止,我找到的所有解决方案都涉及一个单一的维度。
用例是将T**
和std::vector<std::vector<T>>
都传递给消耗矩阵数据的函数。
template<class RowIt>
void foo(RowIt rowFirst, RowIt rowLast) {
// size doesn't handle dynamically allocated arrays
size_t columns = std::size(*rowFirst);
// second layer std::begin, std::end and iterator doesn't
// work for dynamically allocated arrays
for (; rowFirst != rowLast; ++rowFirst) {
auto colFirst = std::begin(rowFirst);
auto colLast = std::end(rowFirst);
for (; colFirst != colLast; ++colFirst) {
// processing logic
}
}
}
我试图将一维解决方案扩展到多维。我遇到的问题是
template<class T>
class view {
T* data_;
};
CCD_ 5不能由CCD_ 6组成。
您可以为嵌套的views
添加部分专业化。
template<class T>
class view {
using pointer = T*;
pointer data_;
};
template<class T>
class view<view<T>> {
using pointer = typename view<T>::pointer *;
pointer data_;
};
或者通过traits类指定view::pointer
,如果它是与主模板的唯一分歧
template<class T>
class view_traits {
using pointer = T*;
};
template<class T>
class view_traits<view<T>> {
using pointer = typename view<T>::pointer *;
};
template<class T>
class view {
using pointer = typename view_traits<T>::pointer;
pointer data_;
// other members use T unchanged
};
相关文章:
- 何时在引用或唯一指针上使用移动语义
- 如何从具有移动语义的类对象中生成共享指针
- c++在使用指针时移动语义
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- 如何包装多级原始指针以赋予其容器语义
- 智能指针移动语义我不清楚
- 如何使用不同的指针算术语义
- 基于指针容器循环的范围内的值语义
- 为什么我们应该使用带有唯一指针的 std::move 语义?
- 在封装指针的类中,移动语义无意中被复制构造函数取代
- 移动语义是否只是一个浅层副本并将其他人的指针设置为 null?
- 明智的指针所有权语义和平等
- C++ 中不同指针语法之间的语义差异
- C/C++ 函数中的引用、指针或值语义
- 传递指向常量指针的指针到字节数组的语义冲突
- 文件输入和指针所有权语义
- 唯一指针xvalue语义?为什么lambda f2的行为与lambda f1不同
- 复制C++唯一指针的语义
- C++11 智能指针语义
- 传递函数指针 - 语义