Eigen::Map 默认模板参数如何工作?

How do Eigen::Map default template arguments work?

这很可能不是 Eigen 特有的,但这是我第一次看到它并且不知道它是如何工作的。

definition of Eigen::Map 中有 3 个模板参数:<typename PlainObjectType, int MapOptions, typename StrideType>.

没有设置默认值,但是从 these examples 中可以看出,最后两个参数没有指定。例如,我们可以简单地写成 Map<Matrix3i>(array).

我错过了什么吗?这是特定于这种情况还是在 C++ 中更普遍?

关于它的可能性很小。第一个更简单,是在模板声明而不是定义中给出默认参数。也许在库头的某个地方有这样的东西:

template<typename PlainObjectType,
     int MapOptions = <some default options>,
     typename StrideType = <some default type>> 
class Map;

第二种可能是partial template specialization, about which You can read at cppreference.com

默认选项定义在 header ForwardDeclarations.h:

template<typename MatrixType, 
         int MapOptions=Unaligned,
         typename StrideType = Stride<0,0>
>
class Map;

(为了便于阅读而添加了换行符)