Есть ли быстрый способ узнать доступность члена класса для огромного класса?

Я использую Visual Studio с Visual Assist.

Я обнаружил, что если класс становится слишком большим, вам нужно прокрутить вверх, чтобы проверить модификаторы доступа, чтобы узнать, является ли метод или переменная общедоступной, защищенной или т. д. Это занимает некоторое время, и модификатор доступа может быть пропущен, если вы прокручиваете слишком быстро .

Есть ли способ, например, ярлык или что-то в Intellisense/Visual Assist, чтобы немедленно сообщить мне о доступности участника?

(Сценарий: изучение исходного кода Unreal Engine...)


person TomBlooz    schedule 10.09.2020    source источник
comment
Разделитесь на меньшие классы. Объекты бога плохи (в том числе и по этой причине).   -  person πάντα ῥεῖ    schedule 10.09.2020
comment
@πάνταῥεῖ Не уверен, что бедный старый Том хочет работать в Epic Games.   -  person Bathsheba    schedule 10.09.2020
comment
Некоторые IDE (например, Visual Studio IIRC, возможно, также Eclipse) также имеют небольшое древовидное представление, показывающее члены класса, упорядоченные по их видимости (или в алфавитном порядке) для быстрой навигации.   -  person πάντα ῥεῖ    schedule 10.09.2020
comment
Просто #define private public перед включением заголовков. Теперь вы можете быть уверены, что все участники являются публичными :-)   -  person Jeffrey    schedule 10.09.2020
comment
@Jeffrey: Увы, это неопределенное поведение.   -  person Bathsheba    schedule 10.09.2020
comment
@ Вирсавия, это было в шутку. Но я видел производственный код для финансового учреждения, которое зависело от него.... страшно   -  person Jeffrey    schedule 10.09.2020
comment
@Джеффри: РБС?   -  person Bathsheba    schedule 10.09.2020


Ответы (1)


Не составит труда добавить видимость перед каждым членом класса следующим образом:

class Foo {
    public:    float foobaz1();
    public:    void foobaz2();

    protected: int baz1();
    protected: std::string baz2();

    private:   int bar1();
    private:   double bar2();
};

Необычно1, но синтаксически правильно.


Хорошо, когда вы упоминаете Unreal-Engine как проект, который находится вне вашего контроля. Для этого я бы попытался найти достойную IDE, которая поддерживает компактное древовидное представление, в котором отображаются все члены класса, упорядоченные по области действия, в алфавитном порядке (или по другим критериям) для быстрой навигации.

Любая IDE, поддерживающая intellisense, должна иметь такую ​​функцию, потому что код в любом случае необходимо грубо анализировать.

Я почти уверен, что Visual Studio поддерживает это (не уверен насчет VS Code). Eclipse может быть, я не могу вспомнить, я все равно редко использую такие причудливые вещи и обычно предпочитаю разбивать вещи на более мелкие единицы.

Другой предпочтительный метод:

CTRLf, введите public, перейдите туда и посмотрите вниз. По крайней мере быстрее, чем прокрутка.


1)Однако ребята из C++ отправят вас в штрафной угол Java.

person πάντα ῥεῖ    schedule 10.09.2020
comment
Насколько я помню, есть или, возможно, была небольшая разница: компилятору разрешено переупорядочивать элементы данных на границах меток доступности. Хм. В вашем примере вы не показали никаких элементов данных. Тем не менее, при использовании OP это может нарушить совместимость макета, не так ли? - person jthill; 11.09.2020
comment
@jthill Будет работать для членов данных (переменных членов класса) таким же образом. Ничто не будет нарушено макетом класса или чем-то подобным. Я не совсем понимаю вашу озабоченность вообще ТБХ. - person πάντα ῥεῖ; 11.09.2020
comment
Ясно, важна сама доступность, а не наличие ярлыка. Вот что я был вспоминая, с тех пор он был расслаблен. - person jthill; 11.09.2020
comment
@jthill Я никогда не говорил менять уже существующую видимость, а просто повторял это для каждого участника, кстати. - person πάντα ῥεῖ; 11.09.2020
comment
Верно. С C++03 это позволило бы произвольное переупорядочивание макета по каким-то непостижимым причинам, которые у них были для этого, возможно, сломав внешнюю цепочку инструментов, настроенную для существующей. - person jthill; 11.09.2020