以下method
调用失败,因为它被声明为非静态函数。我不明白为什么。
struct Test
{
template<typename T> method(){return T();}
template<typename S> struct W;
template<> struct W<int>
{
int meth()
{
return method<int>(); // method can't be called this way
}
};
};
答案 0 :(得分:1)
这与模板无关,我们可以简化整个事情:
struct Outer
{
void outerF() { }
struct Inner
{
void innerF() { outerF(); }
};
};
虽然在另一个外部类中定义,但内部类独立于外部类。为了能够调用外部类的函数,你需要一个后一个类的实例,但是没有任何自然的(隐式),所以你需要明确地提供一个:
struct Outer
{
void outerF() { }
struct Inner
{
void innerF() { o.outerF(); }
private:
Outer o;
};
};
很可能,您宁愿以引用或指针的形式引用外部类,在构造函数中初始化,或者(仅在指针的情况下)setter。