template [somename]' làm gì?'/> template [somename]' làm gì?'/> template [somename]' làm gì?'/> Cuộc gọi đến 'this-> template [somename]' làm gì? | paginaswebpublicidad.com

Câu hỏi Cuộc gọi đến 'this-> template [somename]' làm gì?


Tôi đã tìm kiếm câu hỏi này và tôi không thể tìm thấy bất cứ điều gì về nó. Có cách nào tốt hơn để truy vấn một cái gì đó như thế này trong Google hoặc bất cứ ai có thể cung cấp một liên kết hoặc liên kết hoặc một lời giải thích khá chi tiết? Cảm ơn!

EDIT: Đây là một ví dụ

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

Ví dụ này là từ ndarray dự án trên Google Code và không phải là mã của riêng tôi.


15
2018-04-03 23:57


gốc


Chính xác thì bạn hỏi gì? Vui lòng cung cấp một số ví dụ về mã, câu hỏi của bạn khá mơ hồ. - Mike Bailey
Trừ khi anh ta có một lớp có một thành viên dữ liệu được gọi là mẫu, nhưng đó chỉ là một điều ngớ ngẩn để làm. - Mike Bailey
Đây không phải là một khía cạnh "cơ bản" của C ++. - Phillip Cloud
Tôi phải nói, đó là một số cú pháp cực kỳ kỳ lạ. - Mike Bailey
@Apprentice Queue: Không cần phải được condescending ở đây. Tôi chỉ đơn giản là đã không bao giờ đi qua cú pháp này trước và đã tự hỏi làm thế nào mã như vậy cư xử. "this-> template" không phải là một cái gì đó được giải quyết khi người ta học các lớp trong C ++. - Phillip Cloud


Các câu trả lời:


Đây là một ví dụ this->template bắt buộc. Nó không thực sự phù hợp với ví dụ của OP mặc dù:

#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();
}

Trong ví dụ này, this là cần thiết bởi vì nếu không alloc sẽ không được tra cứu trong lớp cơ sở vì lớp cơ sở phụ thuộc vào tham số mẫu T. Các template là cần thiết bởi vì nếu không thì "<" được thiết kế để mở danh sách tham số mẫu có chứa 200, nếu không sẽ chỉ ra một dấu nhỏ hơn ([temp.names] / 4).


35
2018-04-04 00:17



Làm thế nào có nghĩa là, đã không nhận được thông báo về câu trả lời của bạn. :) +1 ví dụ + tham chiếu chuẩn. - Xeo