- 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);
}
Говногость 28.03.2012 22:01 # 0
kyzi007 28.03.2012 23:06 # 0
Мне лично это по глазам бензопилой ездит.
defecate-plusplus 28.03.2012 23:18 # 0
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 в этом случае можно и обойтись - ну это уже на вкус и цвет
Говногость 29.03.2012 09:35 # 0
Ну а вообще const в С++ зачем? А затем, чтобы ошибку не допустить и случайно не изменить переменную.
>это какой то std::map.
Ну вы правы, только это boost::unordored_map.
>2.1) функция точно должна аварийно завершить приложение, а не вернуть, например bool?
Нет, она вызывается только в дебаге, в релизе не вызывается. Типичный assert. Это просто на тот случай, если какойто мудак накосячил и использовал систему не правильно.
>раз уж так хочется уникальности value в оном, а использование буста никто не ограничивает - можно взять хотя бы boost::bimap или иное применение Boost.MultiIndex
В данном случае в релизе эта функция не вызывается. И тащить в релиз оверхед бимапа мне кажется не стоит. Кстати, есть там какой unordored_bimap или hash_bimap?
>Это вброс? TWindowCasterToWindowAdditionalInformati on GetWindowAdditionalInformationFunction
Ну я не знаю, у нас так принято, чтобы было читаемо. Не wctwai называть же.
defecate-plusplus 29.03.2012 09:51 # 0
> читаемо
а получилось наоборот
да даже TCasterRepository::mapped_type и то читаемее
и да, const & в параметрах забыли
Говногость 29.03.2012 10:06 # 0
Это указатель на функцию.
Кстати, чем _ не угодил? Лично я бы здесь вставил лямбду взамен этой локальной структуры со статической функцией без возможности удобного захвата переменных. Но пока С++11 до нас не дошёл. Тк сама структура тут лишний довесок от старого стандарта, то видимо её заменили на _, чтобы в глаза не значащая часть не бросалась.
Говногость 29.03.2012 12:52 # 0
Мне, например импонирует локальная структура, но с конструктором для захвата локальных переменных.
guest8 09.04.2019 12:56 # −999