C ++:使用嵌套类时无法推断模板参数

时间:2017-08-28 23:25:00

标签: c++ nested inner-classes

美好的一天的人。

我得到了一个分配,我必须在其上实现一个类似于迭代器结构的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”。但我可能会被问到为什么我没有做到这一点,所以我需要了解这里发生了什么。

0 个答案:

没有答案