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

时间:2018-06-18 11:01:35

标签: c++

以下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
        }
    };
};

1 个答案:

答案 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。