Может ли название параметра шаблона подэмить название члена этого класса?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Может ли название параметра шаблона подэмить название члена этого класса?

Сообщение Anonymous »

Пример
рассмотрим этот пример (https://godbolt.org/z/hre3yezpd):образно

Код: Выделить всё

#include 

class Foo {
template 
void WriteNestedMessage(uint32_t field_number, Write write_message);

protected:
void Write();
};

template 
void Foo::WriteNestedMessage(uint32_t field_number, Write write_message) {}
В этом примере:
  • У нас есть шаблон в классе Declaration метод с именем wrisenestestmessage . Его аргумент шаблона записывает тени имени защищенного метода записи .
  • У нас есть шаблон вне класса определение для writenestestedmessage чей шаблон также называется write .

    /> компиляторы < /h2>
    clang принимает этот код без жалоб.

    Код: Выделить всё

    :12:53: error: 'Write' is not a type
    12 | void Foo::WriteNestedMessage(uint32_t field_number, Write write_message) {}
    |                                                     ^~~~~
    :12:6: error: no declaration matches 'void Foo::WriteNestedMessage(uint32_t, int)'
    12 | void Foo::WriteNestedMessage(uint32_t field_number, Write write_message) {}
    |      ^~~
    :5:8: note: candidate is: 'template void Foo::WriteNestedMessage(uint32_t, Write)'
    5 |   void WriteNestedMessage(uint32_t field_number, Write write_message);
    |        ^~~~~~~~~~~~~~~~~~
    :3:7: note: 'class Foo' defined here
    3 | class Foo {
    |       ^~~
    :12:53: error: 'void Foo::Write()' is protected within this context
    12 | void Foo::WriteNestedMessage(uint32_t field_number, Write write_message) {}
    |                                                     ^~~~~
    :8:8: note: declared protected here
    8 |   void Write();
    |        ^~~~~
    Compiler returned: 1
    
    Он ясно верит - в шаблоне определение - что записи ссылается на защищенный метод, а не параметр шаблона одного и того же имени. Противоречиво:

    В определении члена шаблона класса, который появляется за пределами определения шаблона класса, имя элемента шаблона класса скрывает имя параметра шаблона любого класса класса, , но не параметр шаблона

    Подробнее здесь: https://stackoverflow.com/questions/797 ... that-class
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»