Что делает вызов this-> template [somename]? - PullRequest
22 голосов
/ 04 апреля 2011

Я искал этот вопрос и ничего не могу найти по нему. Есть ли лучший способ запросить что-то подобное в Google или кто-то может предоставить ссылку или ссылки или довольно подробное объяснение? Спасибо!

РЕДАКТИРОВАТЬ: Вот пример

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 в Google Code и не является моим собственным кодом.

1 Ответ

44 голосов
/ 04 апреля 2011

Вот пример, где требуется this->template. Это не совсем соответствует примеру ОП:

#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). </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...