2010-09-01 77 views
5

我需要对问题进行一些说明,为什么我们需要范围解析运算符或this指针从模板基类访问公共继承成员。 据我所知,它是为了增加清晰度,但this如何增加任何进一步的澄清,而不仅仅是它是该类的成员。访问公有继承模板数据成员

为了让我的问题更清晰,我添加了一些代码。

#include <iostream> 
using namespace std; 

template <class T, class A> 
class mypair { 
     public: 
     T a, b; 
    public: 
    mypair (T first, T second) 
     {a=first; b=second;} 

     virtual void printA() 
     { 
     cout<<"A"<<a<<endl; 
     cout<<"B"<<b<<endl; 
     } 
}; 







template <class T, class A> 
class next: mypair<T,A> 
{ 
public: 

     next (T first, T second) : mypair<T,A>(first, second) 
     { 
     } 

     void printA() 
     { 
     cout<<"A:"<<mypair<T,A>::a<<endl; // this->a; also works 
     cout<<"B:"<<mypair<T,A>::b<<endl; // this-b; also works 
     } 

}; 


int main() { 
    next<double,float> newobject(100.25, 75.77); 
    newobject.printA(); 
    return 0; 
} 

输出:

A:100.25 
B:75.77 

如果删除的范围(或这个操作符),则出范围误差均。 但为什么我们需要一个公开继承的成员的范围。

对此的一些想法会很棒。

回答

4

参考Name lookup - Using the GNU Compiler Collection (GCC)

通过添加前缀明确mypair<T, A>,或this->,你让printA模板参数依赖。然后这些定义将在模板实例化阶段解析。

+0

有趣的阅读 那么这是一个只有模板的特例吗? – Sii 2010-09-01 08:23:45

+0

仅限模板类中的函数。 – 2010-09-02 08:49:49