我有一个函数,将一个具有多个参数的模板类作为参数(参见以下代码中的“func2”)。我希望该函数能够将继承自 agument 类型的类作为参数,并通过向上转换自动解析模板类型。在下面的示例中,函数 'func1' 可以,但当参数是函数 'func2' 的多个模板类时,显然不可能直接。
错误消息指出:“候选模板被忽略:替换失败:模板模板参数的模板参数与其相应的模板模板参数不同”我理解(并且有点同意)该消息。但这对于 'func1' 来说是相同的情况,并且工作正常。
所以我的问题是,有没有一种方法可以在使用函数时通过自动向上转换将变量“d”视为“C”类型?如果是这样,如何?我正在使用 Xcode 5.1.1,clang-503.0.40。和 C++11 选项。谢谢
template <class T1>
class A {};
class B : public A<int> {};
template <template <class T1> class T, class T1 >
void func1(T<T1> _arg) {}
template <class T1, class T2>
class C {};
template <class T1>
class D : public C<T1,int> {};
template <template <class T1, class T2> class T, class T1, class T2>
void func2(T<T1,T2> _arg) {}
int main() {
A<int> a;
B b;
func1(a);//works
func1(b);//works, T1 is resolved
C<float,int> c;
D<float> d;
func2(c);//works
func2(d);//doesn't work,compilation error message: "Candidate template ignored: substitution failure : template template argument has different template parameters than its corresponding template template parameter"
return 0;
}