1

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

“受控龙骨库塔”不是类模板

在以下代码中:

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 库中是如何工作的?

谢谢你。

4

2 回答 2

1

看第 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;

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

于 2015-02-06T11:09:51.370 回答
0

如果语法是:

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

那么它是一个“主模板定义”。如果是:

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

然后它是部分模板特化(为特殊参数情况定义“映射”的二级定义。

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

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

template<...>声明在主定义和专业化中的含义不同。在主定义中,它定义了“签名”(应该如何调用“实例化”),在专业化中,它只意味着提供一些内部使用的名称。

于 2015-02-06T11:16:25.333 回答