- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我写了一个 operator<<
处理 boost::multi_array
的特化, 并使用 ConstMultiArrayConcept
这样它就可以在外部阵列和子阵列上工作。不过,我想知道为什么 multi_array
概念有一个 std::size_t NumDims
模板参数,因为它可以简单地从 multi_array
中提取出来.唯一使用 NumDims
在 ConstMultiArrayConcept
作为 idgen_helper
的递归深度 arg , 测试切片。
作为引用,这里是 multi_array
的 header 概念: http://www.boost.org/doc/libs/1_51_0/boost/multi_array/concept_checks.hpp
这是我重载的 operator<<
template <typename CharT, typename Traits, typename MultiArrayT>
BOOST_CONCEPT_REQUIRES(
((boost::multi_array_concepts::ConstMultiArrayConcept<MultiArrayT, MultiArrayT::dimensionality>)),
(std::basic_ostream<CharT, Traits>&)) // return type
operator <<( std::basic_ostream<CharT, Traits>& os, MultiArrayT const& ary )
{
typename std::basic_ostream<CharT, Traits>::sentry opfx( os );
if ( opfx ) {
boost::multi_array_types::size_type const* sizes = ary.shape();
// using Mathematica array notation
os << "{";
for ( int i = 0; i < sizes[0]; ++i ) {
if ( i > 0 ) os << ", ";
// verbose just to keep the types apparent
typedef typename MultiArrayT::const_reference subType;
subType item = ary[i];
os << item;
}
os << "}\n";
}
return os;
}
这个特化是有效的,但我一定在理解上遗漏了一些东西。任何线索将不胜感激。
最佳答案
概念模板类声明:
template <typename Array, std::size_t NumDims> struct ConstMultiArrayConcept
{
...
};
看看 ConstMultiArrayConcept
在 Boost 代码中是如何实际使用的:
template <typename T, std::size_t NumDims>
class multi_array_ref {
...
// Assignment from other ConstMultiArray types.
template <typename ConstMultiArray>
multi_array_ref& operator=(const ConstMultiArray& other)
{
function_requires<
detail::multi_array::
ConstMultiArrayConcept<ConstMultiArray,NumDims> >();
...
multi_array_view& operator=()
和 sub_array& operator=()
中采用其他 ConstMultiArray
类型的相同代码。
看起来 NumDims
不是传递的数组类型 Array
的维数,它是检查赋值与给定兼容性的外部数组类型的维数其他数组类型。所以它不能从Array
模板参数中推导出来。
关于c++ - 为什么 boost::multi_array 的 ConstMultiArrayConcept 有一个 NumDims 模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12163795/
我一直在研究 boost::multi_array 库,以寻找一个允许您在单个 for 循环中遍历整个 multi_array 的迭代器。 我不认为那个库中有任何这样的迭代器。 (在那里找到的迭代器可
我有一个 3 维的 boost::multi_array boost::multi_array* newArr = new boost::multi_array(boost::extents[x][
下面的代码给出了一个段错误: #include #include #include "binItr.h" #include using namespace std; int main(){
我面临以下问题。我想使用 boost::multi_array 创建一个对象指针的多维数组,但即使我编写的代码可以编译,当我尝试在 Eclipse 中运行时,程序也会终止并且不会打印任何内容。让我举例
我对我认为应该是一段简单的代码有疑问。我有一个 N x M 的二维数组,当前存储在 boost multi_array 中。 N 列表示空间维度,例如x,y,z 和 M 行是每个维度上的点。 我想做的
我有一个模板类,它执行一些计算并返回 multi_array,像这样有点过于简单了: template class C { public: typedef boost::multi_arra
我有三维 boost::multi_array 对象。我想将 origin 的绝对偏移量转换为多维索引,反之亦然。有没有一种简单的方法可以使用 boost 的内置工具来做到这一点,或者我需要自己根据数
我想学习如何将一个一维 multi_array 添加到另一个一维 multi_array 的末尾。我该怎么做? 最佳答案 与任何其他容器一样,Boost 多数组具有(没有很好记录的)迭代器,因此您可以
我正在使用 boost::multi_array 来存储一些数据。我使用 View 处理数据,因为我需要处理不同维度的数据切片。 我的问题是,boost::multi_array 的内存是如何管理的?
我正在使用二维 boost::multi_array 来存储自定义结构的对象。问题是我有大量的这些对象,所以我需要的数组索引超出了整数的范围。是否有可能将 long 用作多数组的索引,或者您对如何存储
我看过this post它解决了如何使用 boost::multi_array::origin() 函数循环遍历不是从零开始的数组,但这只会创建一个循环。 如何遍历multi_array的每一维,例如
范围可用于对 Boost 多维数组 (multi_array) 进行切片。根据documentation有多种定义范围的方法,但并非所有方法都能编译。我在 Ubuntu 11.04 上使用 GCC 4
假设我有一个 N 维 boost::multi_array(为简单起见,类型为 int),其中 N 在编译时已知,但可以变化(即是一个非类型模板参数).我们假设所有维度的大小都相同 m。 typede
首先我想说我是新手。 我正在尝试初始化 boost:multi_array在我的类(class)里。我知道如何创建 boost:multi_array : boost::multi_array foo
在下面的代码中,ExtractSubArray 函数是完全通用的,而 ExtractSubArrayCornerAndExtent 需要在编写代码时了解维度(以构造RangeType 参数)。有什么方
我有一个 3 维 boost::multi_array 表示 2d tilemaps 层。我希望能够清除一层——也就是遍历一层上的所有图 block 并将其值设置为 0,但我不知道该怎么做——我相信我
我正在尝试弄清楚 boost::multi_array 构造函数或调整大小方法是否可以抛出 bad_alloc 异常(或指示分配或调整大小失败的其他一些异常)。我无法在任何地方的文档中找到此信息。 澄
我必须通过引用或指针将数组传递给其他函数,我不在乎,只要它运行速度快即可。这就是我开始使用boost库的原因。我是通过以下方式做到的: using namespace boost; typedef
我无法调整 boost::multi_array 的大小。当我尝试它时,它会给出关于 std::_Copy_impl 等的错误。这是代码 #include typedef boost::multi_
我正在尝试使用以下测试程序将 boost::multi_array 的性能与本地动态分配的数组进行比较: #include #define _SCL_SECURE_NO_WARNINGS #defi
我是一名优秀的程序员,十分优秀!