Как проверить класс дружбы? - PullRequest
2 голосов
/ 21 мая 2019

Стандартная библиотека предоставляет много полезных типографских наборов "is", которые говорят о взаимосвязи двух классов, таких как is_base_of, is_convertible, is_same и т. Д. Есть ли способ реализовать типографский * is_friend дляскажите, является ли класс A другом класса B?

Пример кода:

class A {};
class B { friend class A; };
class C { friend class B; };

is_friend<A, B>; // true
is_friend<B, A>; // false
is_friend<B, C>; // true
is_friend<A, C>; // false

1 Ответ

0 голосов
/ 21 мая 2019

Нет, это невозможно.В вашем примере ничто в B не имеет каких-либо ограничений доступа, поэтому дружба A не имеет никакого эффекта.Поскольку дружба не является ни наследственной, ни переходной, нет способа использовать такой прием, как наследование от рассматриваемого класса и добавление частного члена.

...