我一直在处理的一些代码中遇到问题。这是我可以创建的最简化的版本:
template <class A>
class Outer {
public:
template <class B>
class Inner {
public:
template <class C>
void foo(Outer<C>::Inner<C> innerC) { }
};
Inner<A> inner;
};
class X {};
class Y {};
int main() {
Outer<X> outerX;
Outer<Y> outerY;
outerX.foo<Y>(outerY.inner);
}
错误是:
error: expected primary-expression before ">" token
并在编译时在声明 . 时触发void foo
。导致这种情况发生的我的代码有什么不正确的地方?
换句话说,我想要做的是让嵌套类能够接受具有任何模板类型的嵌套类 - 但当然嵌套类的模板类型取决于外部类的模板类型,所以我使用::
语法,但是这给出了一个错误。
我知道我在这里尝试做的可能不是一个好习惯,但这个问题的目的是更好地理解模板语法。