以下代码中存在已知错误:
'controlled_runge_kutta'不是类模板
在以下代码中:
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库中是如何工作的?
谢谢。
答案 0 :(得分: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行中只有该类的部分特化。
答案 1 :(得分:0)
如果语法为:
template <template-parameters...> class NAME { ... };
然后它是“主模板定义”。如果是:
template <template-parameters...> class NAME<parameter-spec> { ... };
然后它是一个部分模板特化(一个辅助定义,为特殊情况的参数定义“映射”。
如果尚未提供该名称(类或函数模板)的主模板定义,则无法声明部分模板特化。
所以,取决于你想宣布的内容。如果只是一个模板 - 然后删除&lt; ...&gt;中的所有内容在班级名称之后。如果是专业化,那么请先定义模板本身。
template<...>
语句在主定义和专门化中的含义并不相同。在主定义中,它定义了“签名”(应该如何调用“实例化”),在专门化中它只是提供一些在内部使用的名称。