首页 > 解决方案 > C++ - 从子类推导模板参数失败

问题描述

我正在尝试使用来自其他类的子类作为模板函数的参数:

template<typename T> class Class1{

public:
    class Sub1{};

};

template<typename T> class Class2{

public:
    Class2() = default;

    template<typename T_other> void func(const typename Class1<T_other>::Sub1 sub) {}

};

// ...code

Class1<int>::Sub1 sub1;
Class2<float> class2;
class2.func( sub1); //ERROR

错误说:

error: no matching function for call to ???Class2<float>::func(Class1<int>::Sub1&)???
         class2.func( sub1); //ERROR
                          ^
note: candidate: ???template<class T_other> void Class2<T>::func(typename Class1<T_other>::Sub1) [with T_other = T_other; T = float]???
         template<typename T_other> void func(const typename Class1<T_other>::Sub1 sub) {}
                                         ^~~~
note:   template argument deduction/substitution failed:
note:   couldn't deduce template parameter ???T_other???

怎么了?错误消息说正确的类型(Class1<int>::Sub1),为什么它不能推断出来呢?

标签: c++templatesgcc

解决方案


推荐阅读