Я новичок в шаблонном метапрограммировании, пытаюсь реализовать создание нескольких версий похожего, но немного отличающегося кода:
#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': недопустимое использование явных аргументов шаблона
(тело обобщенного шаблона комментируется в этом случае, хотя это не имеет никакого значения)
Такая специализация есть во всех примерах для частичной специализации, но делаетне работа для меня.Это меня сильно смущает.
Очень благодарен за любые предложения