May 14, 2008

Property & C++

В последнее время заинтересовался вопросом реализации property в C++. К текущей итерации своих размышлений по этому поводу наткнулся на парочку интересных (для меня) вещей:

Статья на RSDN: Свойства в С++
Вариант реализации свойств на основе шаблонов, но не совсем так, как хотелось бы.

Статья о FastDelegate на Code Project: Member Function Pointers and the Fastest Possible C++ Delegates и ее перевод на RSDN.
Очень интересная вещь. Почему-то мне пришло в голову, что это может быть полезным.

boost::function - функтор (функциональный объект).
Продолжение темы делегатов.

Property Map Library - Отображения свойств в Boost.
Представления пока нулевые, надо смотреть.

Очень странно, но в C++09 Standard Draft я не смог найти ничего похожего, что смогло бы как-то обозначить этот момент. Механизма property в С++ нет и похоже не предвидеться.

6 comments:

Alno said...

А чем тебе не нравится реализация, которая приведена на RSDN?

Сергей Семёнов said...

to Alno
Инициализацией...

Изначально хотелось лаконичности, но увы... И я вполне согласен делать инициализацию посредствам конструктора, но удовольствия мне это не приносит. С++ лаконичность недостижима из-за самого устройства класса, функций-членов класса и неявно передаваемого параметра this.

Так или иначе, все же я сделал почти тот же вариант, что и на RSDN, но это все не то...

Alno said...
This comment has been removed by the author.
Сергей Семёнов said...

Мне нравятся свойства в стиле C#, потому что это разумно и удобно.

public int Index {
get { /* ... */ }
set { /* ... */ }
}

С# для каждого из методов свойства (get/set) создает отображение на скрытые методы с именами get_Index и set_Index (для примера выше).

Но мне видеться такое расширение языка (новые ключевые слова) маловероятным из-за конфликтов совместимости с существующим кодом. Да и в реальности «свойства» это не самое насущное в языке, я думаю, у разработчиков стандарта есть более важные задачи.

Alno said...

Я удалил комментарий, потому что подумал, что привел в нем невозможную реализацию, но потом покопался, поигрался и пришел к реализации, которая практически идентична описанной мной:

http://blog.alno.name/2008/05/cpp-properties/

Сергей Семёнов said...

to Alno:

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