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-我相信您在注释框中错误地键入了答案