- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
void checkDuplicateType(TWindowCasterToWindowAdditionalInformation GetWindowAdditionalInformation)
{
const TCasterRepository::const_iterator NotFound=_casterRepository.end();
const TCasterRepository::const_iterator Begin=_casterRepository.begin();
struct _
{
static bool TestDuplicateTypeAtThisItem(const TCasterRepository::value_type& Item, TWindowCasterToWindowAdditionalInformation GetWindowAdditionalInformationFunction)
{
return Item.second==GetWindowAdditionalInformationFunction;
}
};
ASSERT(std::find_if(Begin, NotFound, BOOST_BIND(_::TestDuplicateTypeAtThisItem, _1, GetWindowAdditionalInformationFunction))==NotFound);
}
Мне лично это по глазам бензопилой ездит.
1.1) TWindowCasterToWindowAdditionalInformati on - что за аббревиатура? слишком коротко
1.2) TestDuplicateTypeAtThisItem внутри структуры с именем _ - круто сэкономили ресурс клавиатуры, да
1.3) const C::const_iterator - нах?
2) смысл:
2.1) функция точно должна аварийно завершить приложение, а не вернуть, например bool?
2.2) судя по ::value_type и .second - это какой то std::map. Раз уж так хочется уникальности value в оном, а использование буста никто не ограничивает - можно взять хотя бы boost::bimap или иное применение Boost.MultiIndex. Да даже такую явно нередкую операцию поиска по сравнению mapiter.second == value можно было бы вынести наружу и дать ей осмысленное название, кроме того, без boost::bind в этом случае можно и обойтись - ну это уже на вкус и цвет
Ну а вообще const в С++ зачем? А затем, чтобы ошибку не допустить и случайно не изменить переменную.
>это какой то std::map.
Ну вы правы, только это boost::unordored_map.
>2.1) функция точно должна аварийно завершить приложение, а не вернуть, например bool?
Нет, она вызывается только в дебаге, в релизе не вызывается. Типичный assert. Это просто на тот случай, если какойто мудак накосячил и использовал систему не правильно.
>раз уж так хочется уникальности value в оном, а использование буста никто не ограничивает - можно взять хотя бы boost::bimap или иное применение Boost.MultiIndex
В данном случае в релизе эта функция не вызывается. И тащить в релиз оверхед бимапа мне кажется не стоит. Кстати, есть там какой unordored_bimap или hash_bimap?
>Это вброс? TWindowCasterToWindowAdditionalInformati on GetWindowAdditionalInformationFunction
Ну я не знаю, у нас так принято, чтобы было читаемо. Не wctwai называть же.
> читаемо
а получилось наоборот
да даже TCasterRepository::mapped_type и то читаемее
и да, const & в параметрах забыли
Это указатель на функцию.
Кстати, чем _ не угодил? Лично я бы здесь вставил лямбду взамен этой локальной структуры со статической функцией без возможности удобного захвата переменных. Но пока С++11 до нас не дошёл. Тк сама структура тут лишний довесок от старого стандарта, то видимо её заменили на _, чтобы в глаза не значащая часть не бросалась.
Мне, например импонирует локальная структура, но с конструктором для захвата локальных переменных.