2011-04-03 127 views
14

我已经搜索了这个问题,我找不到任何东西。有没有更好的方式在Google中查询这样的内容,或者是否有人可以提供链接或链接或相当详细的解释?谢谢!对'this-> template [somename]'的调用是做什么的?

编辑:下面是一个例子

template< typename T, size_t N> 
struct Vector { 
public: 
    Vector() { 
     this->template operator=(0); 
    } 

    // ...  

    template< typename U > 
    typename boost::enable_if< boost::is_convertible< U, T >, Vector& >::type operator=(Vector< U, N > const & other) { 
     typename Vector< U, N >::ConstIterator j = other.begin(); 
     for (Iterator i = begin(); i != end(); ++i, ++j) 
      (*i) = (*j); 
     return *this; 
    } 
}; 

这个例子是从谷歌代码ndarray项目,而不是我自己的代码。

+4

你到底在问什么?请提供一些代码示例,您的问题相当模糊。 – 2011-04-03 23:59:06

+0

除非他有一个有数据成员称为模板的类,但这只是一件愚蠢的事情。 – 2011-04-04 00:07:07

+6

这不是C++的“基本”方面。 – 2011-04-04 00:07:07

回答

33

以下是需要this->template的示例。它并没有真正虽然符合OP的例子:

#include <iostream> 

template <class T> 
struct X 
{ 
    template <unsigned N> 
     void alloc() {std::cout << "alloc<" << N << ">()\n";} 
}; 

template <class T> 
struct Y 
    : public X<T> 
{ 
    void test() 
    { 
     this->template alloc<200>(); 
    } 
}; 

int main() 
{ 
    Y<int> y; 
    y.test(); 
} 

在这个例子中this是需要的,否则alloc不会在基类中查找,因为基类是依赖于模板参数T。需要template,因为否则用于打开包含200的模板参数列表的“<”将另外指示小于号([temp.names]/4)。

+0

如何表示,没有得到你的答案通知。 :) +1例如+标准参考。 – Xeo 2011-04-04 00:24:38

相关问题