Реализовать свойства или нет? - PullRequest
3 голосов
/ 29 июня 2010

Я нашел несколько методов онлайн о том, как реализовать функциональность, подобную свойствам, в c ++. Кажется, есть некоторые обходные пути, чтобы заставить его работать хорошо.

Мой вопрос в том, что из-за преобладания свойств в управляемых языках я должен тратить усилия и возможность взлома кода (или чего-либо еще) для реализации свойств в моем коде?

Скажем, я собираюсь разработать библиотеку вызовов для использования кем-то другим, достаточно ли будет свойств для проверки дополнительного кода?

Ответы [ 6 ]

9 голосов
/ 29 июня 2010

Что вы можете получить от этого, чего не можете получить, просто используя функции доступа? Мне кажется, что при кодировании вы должны играть на сильных сторонах языка, а не на том, чтобы имитировать другой язык. Так что я бы проголосовал против этого. Однако, если вы пишете на MANAGED C ++ и собираетесь использовать этот код для регулярного взаимодействия с C #, и если по какой-то причине вы хотите сделать бэкэнд более удобным для использования нативным программистом C #, это может быть целесообразным.

4 голосов
/ 29 июня 2010

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

4 голосов
/ 29 июня 2010

Если вы не добавите отражение в смесь (будучи в состоянии во время выполнения определить, какие свойства существуют у объекта), свойства являются не чем иным, как синтаксическим сахаром для методов получения и установки. В этом случае можно просто использовать геттеры и сеттеры.

Свойства с отражением действительно могут быть полезны для программ на C ++. Qt прекрасно справляется с этим .

0 голосов
/ 29 июня 2010

Попытки заставить один язык программирования вести себя как другой часто являются частным случаем эффекта внутренней платформы .

Я согласен с другими - просто используйте методы получения и установки.1006 * Если вам действительно нужны свойства в C ++, возможно, вы уже используете их как расширение языка.Я думаю, что Visual C ++ делает - почти наверняка для управляемого C ++, но, возможно, и для неуправляемого тоже.Лично единственная причина, по которой я бы использовал их, заключается в том, что управляемый C ++ соответствует соглашениям .NET.

Помимо этого, создание внутренней платформы для этого почти наверняка вызовет больше проблем, чем решит.

0 голосов
/ 29 июня 2010

Я однажды пытался реализовать нечто похожее на структуры Matlab в C ++, то есть структуры, в которые можно добавлять именованные поля.После этого я стал твердо убежден в принципе «не борись с языком».

0 голосов
/ 29 июня 2010

Свойства фактически предотвращают разрыв кода, если все сделано правильно. Это позволяет вам изменить реализацию этого свойства, не вызывая вызывающего абонента необходимости изменять свой код или даже беспокоиться об этом.

Например, скажем, у вас есть класс Socket, который принимает номер сокета. Реализуйте как свойство, чтобы просто взять int и сохранить его.

Однако ваш начальник говорит, что вы не должны принимать номера сокетов ниже 1024. Ваша собственность может изменить это на сканирование и не принять значение.

Без изменений в коде вызывающего абонента.

Редактировать: Небольшое неправильное понимание вопроса ... Я взял свойства, чтобы означать нормальные функции доступа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...