我有一种情况,我有这样的嵌套结构:
struct A
{
struct B
{};
};
我有一些模板代码需要知道OUTER类型(在这种情况下,' A')。 所以我试图编写一个可以推断外部类型的模板函数,它看起来像这样:
template<typename T>
void func(typename T::B item)
{}
int main()
{
A::B item;
func(item); // Error here because "candidate template ignored: couldn't infer template argument 'T'"
return 0;
}
它没有编译,原因在上面的评论中给出。
现在,我当然可以将模板简化为类似的东西,但正如您在下面所看到的那样,它不能满足我对于知道&#34;外部&#34;类型,即A。
template<typename T>
void func(typename T item)
{
// Oops, I now have the complete type of A::B but I have a
// specialized function that needs the A without the B as the type parameter
someOtherFunc<???>(...); // The ??? needs to be type A only, without the B
}
答案 0 :(得分:3)
您可以在班级B中添加typedef A outerType;
那么func的实现可能是:
#include <iostream>
struct A{
struct B {
typedef A outerType;
};
};
template <class T>
void func( T f)
{
typedef typename T::outerType outerType;
outerType a;
someotherfunc(a);
}
int main ()
{
A::B item;
func(item);
return 0;
}
当然,你所拥有的每个内部类都应该将其外部类型命名为outerType,以使func能够解决外部类型。