Нет ничего, чтобы сделать класс другом одной конкретной функции, но вы можете сделать FooB
другом класса «ключ» с частным конструктором, а затем FooA::Hello
взять этот класс в качестве игнорируемого параметра. FooC
не сможет предоставить параметр и, следовательно, не может вызвать Hello
:
Является ли этот ключ-ориентированный шаблон защиты доступа известной идиомой?