首页 > 解决方案 > 从部分专用的模板方法调用模板非静态方法

问题描述

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

标签: c++

解决方案


这与模板无关,我们可以将整个事情简化一点:

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

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

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

    private:
        Outer o;
    };
};

很可能,您宁愿以引用或指针的形式引用外部类,在构造函数或(仅在指针的情况下)设置器中初始化。


推荐阅读