История изменений
Исправление 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);
Кстати говоря, возвращаемое значение 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);
Кстати говоря, возвращаемое значение strdup нужно контролировать. Иначе нарветесь на крах программы.
Итого, смайлик, вы показательный кусок идиота. Сначала сами пишете такой ублюдочный код на C++, за который руки нужно отрывать, а потом сваливаете всю вину на язык.