2012-01-27 6 views
8

Я использую визуальную студию в течение некоторого времени, и это раздражает меня каждый раз, когда я работаю с классами. Проблема в том, что когда я создаю объект класса I, я вижу, что частные члены принадлежат к этому классу, и я этого не хочу, потому что, если я создам класс с 10 + частной переменной, то это будет кошмар , должен быть способ скрыть частных членов, Если есть способ, вы можете поделиться им со мной? Спасибо :)Как скрыть частных членов класса?

EDIT:

Вот картина, которая поможет вам понять, что я говорю,

, например, здесь у меня есть 2 отдельные переменные LinkedList class (curSize и head) Я не буду изменять их из main, поэтому нет смысла их видеть (есть?) Как скрыть их, не изменяя свой код? есть ли настройка для Visual Studio?

+0

Трудно видеть, как это может быть реальной проблемой, если вы говорите об исходном коде. Просто поставьте частные части в конце класса. Если вы действительно говорите об отладчике, то его задача - показать состояние объекта. –

+0

На каком языке? если вы говорите о C#, я знаю, что вы также можете использовать частичные классы для разбивки членов класса на несколько файлов. – 000

+0

Если вы говорите об отключении автоматического завершения, оно следует правилам доступности, поэтому частные члены объекта типа A доступны для любого другого объекта типа A. – 000

ответ

4

К сожалению, это невозможно в текущей версии Visual Studio. В C++ список IntelliSense не фильтруется посредством доступности или области видимости. Таким образом, частные члены все еще отображаются даже там, где они фактически недоступны вашим кодом. Также нет настроек для настройки этого поведения.

Вам просто нужно положиться на значок блокировки, чтобы указать, что они частные и, следовательно, недоступны. Все эти маленькие значки в окне IntelliSense do have a meaning, вы знаете.

Но похоже, что эта функция может быть следующей версией Visual Studio (VS11). MSDN says:

Список пользователей Улучшения. Выпадающий список List List появляется автоматически при вводе кода в редактор кода. Результаты фильтруются, поэтому при вводе отображаются только соответствующие элементы. Вы можете управлять типом логики фильтрации, используемой списком пользователей в диалоговом окне «Параметры» в разделе «Текстовый редактор», «C/C++», «Дополнительно».

Как ни глупо, я тоже в восторге от этого. Наряду с другими классными вещами, такими как подсветка синтаксиса и подсветка ссылок. Developer Preview уже вышел, поэтому вы можете попытаться начать использовать его, если хотите, но он может быть не готов к прайм-тайм. И это, по общему признанию, своего рода отвратительная причина для обновления ...

В качестве альтернативы вы могли бы инвестировать в Visual Assist X, который является расширением, доступным для нескольких версий Visual Studio, что добавляет множество возможностей для удобства в C++ IDE и, уместно, улучшает фильтрацию IntelliSense. Это не бесплатно, но для разработчиков C++ это довольно классно, и если бы я не был беден/сломан/дешев, я бы определенно купил его сам.

+1

Нет, до сих пор не появился в VS 2012 RC. Думаю, нам придется подождать Visual Studio 2014, прежде чем мы получим такую ​​простую функцию. Если бы только команда не была настолько занятой уродливым пользовательским интерфейсом и убирала весь цвет ... –

4

Вы можете использовать регионы, как это:

class MyClass { 

    #region Private Variables 

    private int x; 
    private int y; 
    private int z; 

    #endregion 

} 

Visual Studio будет отображать немного - рядом с #region линии. Нажмите, чтобы скрыть переменные.

+0

Спасибо за ваш ответ! :) но есть ли способ сделать это, не изменяя мой исходный код? (например, настройка Visual Studio для отображения/скрытия частных членов класса) – Malkavian

+0

@Malkavian Я серьезно сомневаюсь, что есть один, потому что это непросто сделать: ваши частные переменные могут быть разбросаны через ваш код, поэтому автоматически определяем автоматически складывающиеся области будет довольно проблематичным. – dasblinkenlight

+0

Вам нужно будет использовать '#pragma region' в C++, и это не остановит IntelliSense от показа частных членов (но я понимаю, что вы ответили до того, как вопрос был отредактирован). –

5

Это может быть не лучший ответ, и это не очень хороший ответ, но он выполняет свою работу, и если вы можете жить с небольшим синтаксическим изменением, чем это определенно будет работать.Один трюк, который я узнал из наблюдений std-классов, таких как std :: vector, состоит в том, что они обозначают закрытых членов с префиксом _, тем самым вынуждая всех частных членов к самой нижней части intellisense. Он не удаляет их из списка, но он переместит их всех в самое нижнее, чтобы они не беспокоили вас, когда вы прокручиваете список. Вот пример:

class SomeClass{ 
public: 
    int myPublicMemeber; 
private: 
    int _myPrivateMember; 
}; 
+0

wow nice trick, определенно подумайте об использовании, когда мне нужно скрыть частных членов Спасибо за ваш ответ! – Malkavian