我创建了两个简单的函数,这些函数获取模板参数和一个定义类型的空结构体。
参数类型应用于结构体S以获得引用。我使用一些整数值调用它们,但编译器无法推断参数。
错误1 错误C2783:'A temp(S::type)':无法推断出'A'的模板参数 错误2 错误C2783:'B temp2(S::type,B)':无法推断出'A'的模板参数
为什么会发生这种情况?难道看不出模板参数是char和int值吗?
//S<T>::type results in T&
template <class T>
struct S
{
typedef typename T& type;
};
//Example 1: get one parameter by reference and return it by value
template <class A>
A
temp(typename S<A>::type a1)
{
return a1;
}
//Example 2: get two parameters by reference, perform the sum and return it
template <class A, class B>
B
temp2(typename S<A>::type a1, B a2)//typename struct S<B>::type a2)
{
return a1 + a2;
}
参数类型应用于结构体S以获得引用。我使用一些整数值调用它们,但编译器无法推断参数。
int main()
{
char c=6;
int d=7;
int res = temp(c);
int res2 = temp2(d,7);
}
错误1 错误C2783:'A temp(S::type)':无法推断出'A'的模板参数 错误2 错误C2783:'B temp2(S::type,B)':无法推断出'A'的模板参数
为什么会发生这种情况?难道看不出模板参数是char和int值吗?
X<T>::
,而限定标识符则是以::
作为前缀的标识符,但我无法得出结论或理解整个问题。非常感谢 :) - Mr.Anubis