我是模板元编程的初学者,试图实现类似但略有不同的代码的多个版本的生成:
#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和2:1
但是下面的部分专业化失败了:
template<Style Some>
void doSomething<a1,Some>()
{
// here I want to use sub-template on some: e.g do_other<Some>
}
有错误: 错误C2768:'DoSomething':非法使用显式模板参数
(在这种情况下,通用模板的主体被评论,但它没有任何区别)
这种专业化适用于部分专业化的所有样本,但对我不起作用。这让我很困惑。
非常感谢任何建议
答案 0 :(得分:2)
在C ++中,你不能partial specialization for functions。考虑将您的函数移动到一个类。
答案 1 :(得分:0)
C ++ Priorities函数对您的类型使用特化,其余由普通模板函数处理。