Подтвердить что ты не робот

Есть ли способ автоматически генерировать геттеры и сеттеры, если они не присутствуют на С++?

У меня есть опыт работы с Objective-C, а в Objective-C вы можете позволить компилятору генерировать геттеры и сеттеры для вас, если они еще не присутствуют (@synthesize).

Есть ли способ сделать это на С++ или мне нужно реализовать все геттеры и сеттеры самостоятельно?

4b9b3361

Ответ 1

Я не знаю о такой утилите, и она, вероятно, не увидит много пользы в идиоматическом современном C++:

Современные руководства C++ гласят, что в вашем классе не должно быть геттеров и сеттеров. На самом деле, сеттеры почти полностью бесполезны, а геттеры имеют очень ограниченную полезность. Это связано с устоявшимся принципом разработки программного обеспечения , не спрашивайте.

Если вы хотите изменить состояние экземпляра класса, есть два способа сделать это:

  1. Вы выполняете действие, изменяющее его состояние.
  2. Вы создаете новый экземпляр.

Мутация состояния через сеттеры обычно является признаком запаха кода и плохого архитектурного дизайна.

Я допускаю, что есть исключения из этого правила, исключительно из-за практичности. И это хорошо, но исключений достаточно, чтобы они не гарантировали использование инструментов для автоматической генерации методов получения и установки. Фактически, вы можете использовать это в качестве лакмусовой бумажки: когда вы обнаружите, что хотите получить инструмент для автоматического создания такого шаблона, сделайте шаг назад и пересмотрите свой дизайн.

Ответ 2

Не сам компилятор, но IDE, такой как eclipse CDT , может фактически выполнять это действие автоматически (щелкните правой кнопкой мыши по классу > Источник > Генерировать Getters и Setters...).

Ответ 3

Вы должны реализовать их самостоятельно

Ответ 4

Нет никакого способа сделать это. Однако, если вы используете полнофункциональную среду IDE, такую ​​как Eclipse (не уверен, что Visual Studio имеет эту функцию), есть варианты удобства, чтобы IDE генерировал код getter/setter для вас.

Ответ 5

Нет, компилятор вам не поможет. Например, вы можете создать MACRO или создать код на этапе сборки.

Ответ 6

Преимущество для меня в использовании аксессуаров (особенно легко в виде С# vb.net) -

1/возможность установить точку останова в сеттер или геттер еще не знаете, кто и когда имеет доступ к члену.

2/Вы можете контролировать, какое значение задано в случае необходимости проверки переполнения или другого плохого набора. Это особенно необходимо в публичном libray, например, в редакторе свойств для вашего визуального компонента.

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

Ответ 7

Если вы используете какую-то структуру, которая будет генерировать POCOs для вас, тогда да, возможно, "сгенерируйте" шаблонный код, чтобы это произошло, но сначала вы должны ввести концепцию в среду или среду IDE.

Ответ 8

По крайней мере, в Visual Studio 2015 я не могу его найти. Однако, если вы используете Resharper, тогда он может генерировать сеттер и getter в файле .h

Ответ 10

Я знаю, что уже поздно, я использую VS 2015, и есть плагин/расширение, доступное для установки на торговой площадке Visual Studio, которое даст вам удобство генерации кода получения/установки здесь: https://marketplace.visualstudio.com/items?itemName=Gabsii.getter-setter-generator