我编写了一个处理operator<<
的{{1}}专门化,并使用了boost::multi_array
,以便它可以在外部数组和子数组上工作。不过,我想知道为什么ConstMultiArrayConcept
概念有一个multi_array
模板参数,因为这可以简单地从std::size_t NumDims
中提取出来。 multi_array
中NumDims
的唯一用法是ConstMultiArrayConcept
的递归深度arg,用于测试切片。
供参考,这是idgen_helper
概念的标题:
http://www.boost.org/doc/libs/1_51_0/boost/multi_array/concept_checks.hpp
这是我的重载multi_array
operator<<
这种专业化有效,但我必须在我的理解中遗漏一些东西。任何线索都将受到赞赏。
答案 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
模板参数中推断出它。