我使用以下代码:
template<typename t>
struct foo
{
foo(t var)
{
std::cout << "Regular Template";
}
};
template<typename t>
struct foo<t*>
{
foo(t var)
{
std::cout << "partially specialized Template " << t;
}
};
int main()
{
int* a = new int(12);
foo<int*> f(a); //Since its a ptr type it should call specialized template
}
但是我收到了错误
Error 1 error C2664: 'foo<t>::foo(int)' : cannot convert parameter 1 from 'int *' to 'int'
答案 0 :(得分:3)
两个模板的构造函数的值均为t
,在您的示例中为int
,而不是int*
。要使这个编译使用
template<typename t>
struct foo<t*>
{
foo(t* var)
{
std::cout << "partially specialized Template " << var;
}
};
如果符合您的逻辑,则将int
传递给构造函数。 (Live)