为什么boost :: multi_array的ConstMultiArrayConcept有一个NumDims模板参数?

时间:2012-08-28 16:40:41

标签: c++ boost boost-multi-array c++-concepts

我编写了一个处理operator<<的{​​{1}}专门化,并使用了boost::multi_array,以便它可以在外部数组和子数组上工作。不过,我想知道为什么ConstMultiArrayConcept概念有一个multi_array模板参数,因为这可以简单地从std::size_t NumDims中提取出来。 multi_arrayNumDims的唯一用法是ConstMultiArrayConcept的递归深度arg,用于测试切片。

供参考,这是idgen_helper概念的标题: http://www.boost.org/doc/libs/1_51_0/boost/multi_array/concept_checks.hpp

这是我的重载multi_array

operator<<

这种专业化有效,但我必须在我的理解中遗漏一些东西。任何线索都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

概念模板类声明:

template <typename Array, std::size_t NumDims>  struct ConstMultiArrayConcept
{
...
};

了解如何在Boost代码中实际使用ConstMultiArrayConcept

 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模板参数中推断出它。