Есть ли способ автоматически генерировать геттеры и сеттеры, если они не присутствуют на С++?
У меня есть опыт работы с Objective-C, а в Objective-C вы можете позволить компилятору генерировать геттеры и сеттеры для вас, если они еще не присутствуют (@synthesize
).
Есть ли способ сделать это на С++ или мне нужно реализовать все геттеры и сеттеры самостоятельно?
Ответы
Ответ 1
Я не знаю о такой утилите, и она, вероятно, не увидит много пользы в идиоматическом современном C++:
Современные руководства C++ гласят, что в вашем классе не должно быть геттеров и сеттеров. На самом деле, сеттеры почти полностью бесполезны, а геттеры имеют очень ограниченную полезность. Это связано с устоявшимся принципом разработки программного обеспечения , не спрашивайте.
Если вы хотите изменить состояние экземпляра класса, есть два способа сделать это:
- Вы выполняете действие, изменяющее его состояние.
- Вы создаете новый экземпляр.
Мутация состояния через сеттеры обычно является признаком запаха кода и плохого архитектурного дизайна.
Я допускаю, что есть исключения из этого правила, исключительно из-за практичности. И это хорошо, но исключений достаточно, чтобы они не гарантировали использование инструментов для автоматической генерации методов получения и установки. Фактически, вы можете использовать это в качестве лакмусовой бумажки: когда вы обнаружите, что хотите получить инструмент для автоматического создания такого шаблона, сделайте шаг назад и пересмотрите свой дизайн.
Ответ 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
Ответ 9
В Visual Studio 2017 есть расширение под названием GS Assist. Это дает вам возможность быстро создавать геттеры и сеттеры в C++. Вот ссылка: https://marketplace.visualstudio.com/items?itemName=SeifSarsar.gsassist
Ответ 10
Я знаю, что уже поздно, я использую VS 2015, и есть плагин/расширение, доступное для установки на торговой площадке Visual Studio, которое даст вам удобство генерации кода получения/установки здесь: https://marketplace.visualstudio.com/items?itemName=Gabsii.getter-setter-generator