2015-02-06 2 views
1

Это известная ошибка в следующем коде:«controlled_runge_kutta» не является шаблоном класса

«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; 
} 

Я знаю, почему я получаю эту ошибку. Но мой вопрос заключается в том, как он работает в исходной библиотеке boost от github в строке 146?

спасибо.

ответ

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 есть только частичная специализация этого класса.

0

Если синтаксис:

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

тогда это "определение шаблона мастер". Если это:

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

, то это частичный шаблон специализации (вторичное определение, которое определяет «отображение» для специального случая параметров

Вы не можете объявить частичную шаблонную специализацию, если определение мастер-шаблона. для этого имени (шаблона класса или функции) еще не предоставлено.

Так, это зависит от того, что вы хотели объявить. Если только шаблон - затем удалите все, что находится в < ...> после класса имя. Если специализация, то сначала укажите сам шаблон.

Операция template<...> не означает то же самое в определении мастера и специализации. В определении мастера он определяет «подпись» (как следует использовать «экземпляр»), в специализации это означает только предоставление некоторых имен, используемых внутри.

Смежные вопросы