: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://godbolt.org/z/hre3yezpd):образно[code]#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) {} [/code] В этом примере: [list] [*] У нас есть шаблон в классе Declaration метод с именем wrisenestestmessage . Его аргумент шаблона записывает тени имени защищенного метода записи .
[*] У нас есть шаблон вне класса определение для writenestestedmessage чей шаблон также называется write .
/> компиляторы < /h2> clang принимает этот код без жалоб.[code]: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 [/code] Он ясно верит - в шаблоне определение - что записи ссылается на защищенный метод, а не параметр шаблона одного и того же имени. Противоречиво:
В определении члена шаблона класса, который появляется за пределами определения шаблона класса, имя элемента шаблона класса скрывает имя параметра шаблона любого класса класса, , но не параметр шаблона
Я пытаюсь использовать int member of a constexpr object as a template parameter. The idea is that I create a constexpr Symbol and then have that converted into a SymbolRef (in the real code that 1 is different for different objects).
template...
Я пытаюсь захватить член класса определенного члена класса из функции класса для лямбда.
Чтобы уточнить: у ClassA есть член класса типа ClassB, у которого есть член C (например, указатель). В классе A есть функция, которая присоединяет лямбду к...
Я пытаюсь захватить член класса определенного члена класса из функции класса для лямбда.
Чтобы уточнить: ClassA имеет член класса типа ClassB , который имеет элемент C (например, указатель). В классе A есть функция, которая присоединяет лямбду к...