Привет! Об иммутабельных данных немало говориться, но о реализации на С++ найти что-то сложно. И, потому, решил данный восполнить пробел в дебютной статье. Тем более, что в языке D есть, а в С++ – нет. Будет много кода и много букв.
О стиле – служебные классы и метафункции используют имена в стиле STL и boost, пользовательские классы в стиле Qt, с которой я в основном и работаю.
Введение
Что из себя представляют иммутабельные данные? Иммутабельные данные – это наш старый знакомый const, только более строгий. В идеале иммутабельность означает контекстно-независиую неизменяемость ни при каких условиях.
По сути иммутабельные данные должны:
- обеспечивать физическую и логическую константность;
- запрещать присваивание нового значения на этапе компиляции;
все операции должны проводиться над копией, а не над оригиналом.
Иммутабельные данные пришли из функционального программирования и нашли место в параллельном програмировании, т. к. гарантируют отсутсвие побочных эффектов.
Как можно реализовать иммутабельные данные в С++?
В С++ у нас есть (сильно упрощенно):
- значения – объекты фундаментальных типов, экземпляры классов (структур, объединений), перечислений;
- указатели;
ссылки;
массивы.
Функции и void не имеет смысл делать иммутабельными. Ссылки тоже не будем делать иммутабельными, для этого есть const reference_wrapper.
Читать полностью »