Могу ли я определить, есть ли в классе какие-либо публикуемые c non-stati c члены данных? - PullRequest
1 голос
/ 26 марта 2020

Я пытаюсь написать код, который делает это. Что-то вроде следующего

struct A { int i; };
struct B { private : int i; };
static_assert(has_public_non_static_data_members<A>{});
static_assert(! has_public_non_static_data_members<B>{});

Но я не могу заставить это работать. Обратите внимание, что я не спрашиваю, как выяснить , сколько существует publi c членов данных, их типов или имен.

I can заставляйте подобные вещи работать в некоторых случаях.

  1. Если я знаю имена участников, доступ к которым мне небезразличен.
  2. Если я хочу проверить, что нет членов данных вообще (private / publi c). (игнорируя виртуальное наследование)

Но я не могу различить guish между классами, которые отличаются только спецификаторами доступа членов. Я предполагал, что, вероятно, существует какой-то способ сделать это, пока я не нашел this на cppreference,

Проверка доступа к члену является последним шагом после любого данного Языковая конструкция интерпретируется. Цель этого правила состоит в том, что замена любого частного на publi c никогда не изменяет поведение программы.

(я не смог найти эту точную формулировку здесь , но я предполагаю, что cppreference правильно интерпретирует текст.)

Это наводит меня на мысль, что Решение моей проблемы нарушило бы это намерение. Так значит ли это, что это вообще невозможно? Или еще есть надежда, а я что-то упустил?

...