美好的一天的人。
我得到了一个分配,我必须在其上实现一个类似于迭代器结构的Matrix类。所以,我有以下嵌套类:
template <class T>
class Matrix{
public:
(... stuff)
class Handler{
public:
(...more stuff)
};
(...even more stuff)
}
但是当我尝试运行以下函数时,我得到一个“无法推断参数'T'”:
template <class T>
Matrix<T> multiplicar_matrices(typename Matrix<T>::Handler * m1,
typename Matrix<T>::Handler * m2){ return Matrix<T>(1,1);}
int main(){
Matrix<int>* a1 = new Matrix<int>(1,1);
typename Matrix<int>::Handler h1 = (*a1).getHandler();
Matrix<int>* a2 = new Matrix<int>(1,1);
typename Matrix<int>::Handler h2 = (*a2).getHandler();
multiplicar_matrices(&h1,&h2);
return 0;
}
奇怪的是,以下内容有效:
Matrix<int> multiplicar_matrices(typename Matrix<int>::Handler * m1,
typename Matrix<int>::Handler * m2){return Matrix<int>(1,1);}
int main(){
Matrix<int>* a1 = new Matrix<int>(1,1);
typename Matrix<int>::Handler h1 = (*a1).getHandler();
Matrix<int>* a2 = new Matrix<int>(1,1);
typename Matrix<int>::Handler h2 = (*a2).getHandler();
multiplicar_matrices(&h1,&h2);
return 0;
}
显然,编译器知道h1和h2是“Matrix :: Handler”,它只是在模板创建过程中拒绝承认。 (这很奇怪,不应该只使用模板实例化每个可能的类吗?为什么不用int实例化?)
我不明白为什么它无法推断出参数'T'。
赞赏每一条帮助。
P.S。我完全知道有一些潜在的解决方法,比如在Handler类中定义“mutiplicar_function”。但我可能会被问到为什么我没有做到这一点,所以我需要了解这里发生了什么。