LINUX.ORG.RU

История изменений

Исправление eao197, (текущая версия) :

А что там должно быть?

Нормальный код хотя бы. А уж с тем апломбом, с которым вы про свои «умения» рассказываете, то хороший. Но нет.

Куча шаблонной магии, STL, и так далее?

Вы не имеете не малейшего представления ни о чем из этого, не надо бросаться страшными словами, смысла которых не понимаете.

то весь крестовый маразм, от ссылок и шаблонов до исключений, надо свести к минимуму

Ну а это тогда что такое?

    std::string rn(bd.Name);
    ResourceVar* rv = NULL;
    if(rm->find(rn) != rm->end())
      rv = rm->at(rn);

У вас же rm – это std::map, а метод std::map::at бросает исключения. И это в функции, которая возвращает HRESULT.

При этом сам по себе этот фрагмент заслуживает того, чтобы надавать вам по мордасам на код-ревью. Ибо у вас уже есть валидный итератор, но вы повторно делаете поиск по map-у.

Да и объект rn нет смысла сохранять до конца функции. Достаточно было сделать что-то вида:

ResourceMap::iterator it = rm->find(std::string(bd.Name));
if(it != rm->end())
  rv = it->second;

Ну и еще вот эти вот повторяющиеся фрагментики:

  HRESULT hr;
  if(!name)
    return E_POINTER;
  
  std::string rn(name);
  ResourceMap::iterator it = _samplers.find(rn);
  if(it == _samplers.end())
    return E_INVALIDARG;
  ResourceVar *rv = it->second;

многое говорят о вас, как о программисте.

Исходная версия eao197, :

А что там должно быть?

Нормальный код хотя бы. А уж с тем апломбом, с которым вы про свои «умения» рассказываете, то хороший. Но нет.

Куча шаблонной магии, STL, и так далее?

Вы не имеете не малейшего представления ни о чем из этого, не надо бросаться страшными словами, смысла которых не понимаете.

то весь крестовый маразм, от ссылок и шаблонов до исключений, надо свести к минимуму

Ну а это тогда что такое?

    std::string rn(bd.Name);
    ResourceVar* rv = NULL;
    if(rm->find(rn) != rm->end())
      rv = rm->at(rn);

У вас же rm – это std::map, а метод std::map::at бросает исключения. И это в функции, которая возвращает HRESULT.

При этом сам по себе этот фрагмент заслуживает того, чтобы надавать вам по мордасам на код-ревью. Ибо у вас уже есть валидный итератор, но вы повторно делаете поиск по map-у.

Да и объект rn нет смысла сохранять до конца функции. Достаточно было сделать что-то вида:

ResourceMap::iterator it = rm->find(std::string(bd.Name));
if(it = rm->end())
  rv = it->second;

Ну и еще вот эти вот повторяющиеся фрагментики:

  HRESULT hr;
  if(!name)
    return E_POINTER;
  
  std::string rn(name);
  ResourceMap::iterator it = _samplers.find(rn);
  if(it == _samplers.end())
    return E_INVALIDARG;
  ResourceVar *rv = it->second;

многое говорят о вас, как о программисте.