C++ 从部分专用模板方法调用模板非静态方法

C++ 从部分专用模板方法调用模板非静态方法,c++,C++,以下方法调用失败,因为它被声明为非静态函数。我不明白为什么 struct Test { template<typename T> method(){return T();} template<typename S> struct W; template<> struct W<int> { int meth() { return method<int>(

以下
方法
调用失败,因为它被声明为非静态函数。我不明白为什么

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
        }
    };
};
struct测试
{
模板方法(){return T();}
模板结构W;
模板结构W
{
int meth()
{
return method();//无法以这种方式调用方法
}
};
};

这与模板无关,我们可以稍微简化整个过程:

struct Outer
{
    void outerF() { }
    struct Inner
    {
        void innerF() { outerF(); }
    };
};
尽管在另一个外部类中定义,但内部类独立于外部类而存在。为了能够调用外部类的函数,您需要后一个类的实例,但自然(隐式)没有实例,因此您需要显式提供一个实例:

struct Outer
{
    void outerF() { }
    struct Inner
    {
        void innerF() { o.outerF(); }

    private:
        Outer o;
    };
};

很可能,您更愿意以引用或指针的形式引用外部类,在构造函数或(仅指针)setter中初始化。

错误是什么?Post a,带有错误。您认为这里会发生什么?您知道成员函数是非静态的,那么它的
指针是什么?对象在哪里?
方法
不能以这种方式调用
struct W
Test
的嵌套类型,不是特定对象的属性。您应该声明
方法
静态,这样就可以在不使用
测试
实例的情况下调用它,或者让
meth
知道后者(将一个作为参数传递,或其他任何内容)。@bipll-我相信您在注释框中错误地键入了答案