“controlled_runge_kutta”不是 class 模板

‘controlled_runge_kutta’ is not a class template

这是以下代码中的已知错误:

‘controlled_runge_kutta’ is not a class template

在下面的代码中:

template<
class ErrorStepper ,
class ErrorChecker ,
class Resizer
>
class controlled_runge_kutta< ErrorStepper , ErrorChecker , Resizer , explicit_error_stepper_tag >
{
public:
};

int main()
{
    return 0;
}

我知道为什么会出现此错误。但我的问题是,它在第​​ 146 行 github 的原始 boost 库中如何工作?

谢谢。

查看第 109 行。

template<
class ErrorStepper ,
class ErrorChecker = default_error_checker< typename ErrorStepper::value_type ,
typename ErrorStepper::algebra_type ,
typename ErrorStepper::operations_type > ,
class Resizer = typename ErrorStepper::resizer_type ,
class ErrorStepperCategory = typename ErrorStepper::stepper_category
>
class controlled_runge_kutta;

现在,有模板的声明 class,在第 146 行中只有这个 class 的部分特化。

如果语法是:

template <template-parameters...> class NAME { ... };

那就是 "master template definition"。如果是:

template <template-parameters...> class NAME<parameter-spec> { ... };

然后它是部分模板特化(为参数的特殊情况定义 "mapping" 的二级定义。

如果尚未提供该名称(class 或函数模板)的主模板定义,则不能声明部分模板特化。

因此,取决于您要申报的内容。如果只是一个模板 - 然后删除 class 名称后 <...> 中的所有内容。如果是专业化,那么请先定义模板本身。

template<...> 语句在主定义和专业化中的含义不同。在主定义中,它定义了 "signature"(应该如何调用 "instantiation"),在专业化中,它只是提供一些内部使用的名称。