Для своих нужд был разработан враппер для простых типов данных. Враппер идет в составе библиотеки Mithril, её можно скачать
здесь (30 Кб). В предлагаемом архиве солюшен из трех проектов в которых иллюстрируется использование библиотеки, а так же небольшая статья. Для сборки предлагаемых проектов понадобиться MSVC 7.1 и boost, но в принципе подойдет любой другой компилятор — нужно только создать для него соответствующий проект.
Возможно библиотека будет для кого-то полезной и я не изобрел велосипеда в очередной раз
Я не стал оформлять статью в RSDN, поскольку мне пока интересно насколько будет актуальной предлагаемая библиотека.
Совсем коротенький пример по использованию (using опущен):
wrapper<int, MITHRIL_POLICIES_2(must_be_initialized, set_once), default_error_reporter> a;
try
{
a = 45;
a = 987; // logic error
}
catch( const logic_error& err )
{
cout << "Logic Error: " << err.what() << endl;
}
здесь:
int — "оборачиваемый" тип,
MITHRIL_POLICIES_2(must_be_initialized, set_once) — комбинация из стратегий контроля "обернутого" значения
default_error_reporter — стратегия реакции на провал проверок стратегий контроля.
All suggestions will be greatly appreciated
Здравствуйте, Ulfur, Вы писали:
[]
U>[ccode]
U>wrapper<int, MITHRIL_POLICIES_2(must_be_initialized, set_once), default_error_reporter> a;
must_be_initialized — это что? Первое что пришло в голову — при объявлении должно быть сразу присвоено значение. А тут нет. Создается с пом дефолтного конструктора.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Константин Л., Вы писали:
КЛ>must_be_initialized — это что? Первое что пришло в голову — при объявлении должно быть сразу присвоено значение. А тут нет. Создается с пом дефолтного конструктора.
Нет. Предполагается, что должно быть проинициализировано до первой попытки получить значение, т.е. так:
wrapper<int, must_be_initialized> a;
a = 654;
int c;
c = a; // ОК
wrapper<int, must_be_initialized> a2;
c = a2; // logic error
Здравствуйте, johny5, Вы писали:
J>Лицензия то на либу какая?
Artistic.
Можно использовать когда и где угодно, для любых целей под свою ответственность, при изменениях в библиотеке не стирать имя автора
Уже есть некоторые идеи по добавлению новых фич и написанию нормальной документации.