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

calling template nonstatic method from partially specialized template method

本文关键字:静态方法 调用 模板方法 专用      更新时间:2023-10-16

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

这与模板无关,我们可以稍微简化一下整个事情:

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

虽然在另一个外部类中定义,但内部类独立于外部类存在。为了能够调用外部类的函数,你需要后一个类的实例,但没有任何自然(隐式(的实例,所以你需要显式提供一个:

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

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