LINUX.ORG.RU

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

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

Где тут велосипедостроение?

Да, блин, на каждом шагу, мать вашу. Все тоже самое можно было сделать много проще. Например (код не компилировался, так что опечатки возможны):

template< typename F >
std::string process_path(const std::string & path, F f)
{
  std::vector< std::string::value_type > tmp;
  tmp.reserve(path.size()+1);
  tmp.insert(tmp.begin(), path.begin(), path.end());
  tmp.push_back('\0');
  return f(&tmp[0]);
}

inline std::string path_basename(const std::string& path)
{
  return process_path(path, basename);
}

inline std::string path_dirname(const std::string& path)
{
  return process_path(path, dirname);
}

И все! Никаких, блин, простыней с потоками сознания.

Бугага :-) Если бы я ещё на каждый такой чих создавал шаблоны классов вроде Path, то глаза были бы ещё красней :-) RAII :-) Бугага :-)

Идиот, прочтите, наконец, документацию по unique_ptr. Ваши пляски вокруг strdup-а и free легко заменяются на unique_ptr с кастомной функцией освобождения памяти. Что-то вроде:

std::unique_ptr<char, void(*)(char*)> tmp(strdup(path.c_str()), free);
И не нужно никаких try/catch.

Кстати говоря, возвращаемое значение strdup нужно контролировать. Иначе нарветесь на крах программы.

Итого, смайлик, вы показательный кусок идиота. Сначала сами пишете такой ублюдочный код на C++, за который руки нужно отрывать, а потом сваливаете всю вину на язык.

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

Где тут велосипедостроение?

Да, блин, на каждом шагу, мать вашу. Все тоже самое можно было сделать много проще. Например (код не компилировался, так что опечатки возможны):

template< typename F >
std::string process_path(const std::string & path, F f)
{
  std::vector< std::string::char_type > tmp;
  tmp.reserve(path.size()+1);
  tmp.insert(tmp.begin(), path.begin(), path.end());
  tmp.push_back('\0');
  return f(&tmp[0]);
}

inline std::string path_basename(const std::string& path)
{
  return process_path(path, basename);
}

inline std::string path_dirname(const std::string& path)
{
  return process_path(path, dirname);
}

И все! Никаких, блин, простыней с потоками сознания.

Бугага :-) Если бы я ещё на каждый такой чих создавал шаблоны классов вроде Path, то глаза были бы ещё красней :-) RAII :-) Бугага :-)

Идиот, прочтите, наконец, документацию по unique_ptr. Ваши пляски вокруг strdup-а и free легко заменяются на unique_ptr с кастомной функцией освобождения памяти. Что-то вроде:

std::unique_ptr<char, void(*)(char*)> tmp(strdup(path.c_str()), free);
И не нужно никаких try/catch.

Кстати говоря, возвращаемое значение strdup нужно контролировать. Иначе нарветесь на крах программы.

Итого, смайлик, вы показательный кусок идиота. Сначала сами пишете такой ублюдочный код на C++, за который руки нужно отрывать, а потом сваливаете всю вину на язык.