Почему моя программа не работает, когда я пытаюсь частично специализировать шаблон функции? - PullRequest
2 голосов
/ 02 декабря 2011

Я новичок в шаблонном метапрограммировании, пытаюсь реализовать создание нескольких версий похожего, но немного отличающегося кода:

#include <iostream>

enum Type
{
   a1,
   a2
};
enum Style
{
   b1,
   b2
 };

 template<Type,Style> 
 void doSomething();
 {
   std::cout<<" some rubbish\n";
 };

Полная специализация работает хорошо:

template<> 
void doSomething<a1,b2>()
{
   std::cout<<" this is my template parameters one :" <<a1<< " and  two:"<<b2<<std::endl;
 }

int main(int argc, char* argv[])
{
  doSomething<a1,b1>();
  doSomething<a1,b2>();

   return 0;
}

: немного мусора

: это мой шаблон параметров один: 0 и два: 1

Но частичная специализация, как показано ниже, не работает:

 template<Style Some> 
  void doSomething<a1,Some>()
 {
  // here I want to use sub-template on some: e.g do_other<Some>
 }

с ошибкой: ошибка C2768: 'DoSomething': недопустимое использование явных аргументов шаблона

(тело обобщенного шаблона комментируется в этом случае, хотя это не имеет никакого значения)

Такая специализация есть во всех примерах для частичной специализации, но делаетне работа для меня.Это меня сильно смущает.

Очень благодарен за любые предложения

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

В C ++ нельзя выполнить частичную специализацию для функций . Попробуйте переместить свои функции в класс.

0 голосов
/ 02 декабря 2011

C ++ Приоритеты функций, которые используют специализацию для ваших типов, остальное обрабатывается обычной функцией шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...