Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Код написанный человеком, считающим себя "гуру разработки программирования", а так же "активным научным деятелем".
Главная мысль глядя на это у меня - охренное тестовое задание с вопросом - укажите абсолютно все бредни в этом коде, но разумеется в более нормальной формулировке... а чО - неплохой тест...
з.ы. этот же человек никогда не пишет cpp файлы все в хедерах собачит....
ну человеку явно нравится много ручной работы
может он начитался умных статеек про pimpl, и решил попробовать себя в новом деле, ну подумаешь, хрень получилась
а может он просто дрочит на процесс, гордится собой
кроме того, что всё тут лишнее - и ненужная инкапсуляция с геттерами/сеттерами, и impl *, возвращать неконстантную ссылку из константного метода... если без указателя, то вызывает много вопросов даже у компилятора, видать за этим и указатель! надо же бороть крестопроблемы, в самом деле!
>Impl* impl;
FFFFFUUUUUU
QScopedPointer придумали для лохов. Ъпрограммисты не используют смарт-поинтеры. Лучше пусть QObject сам заботиться об удалении impl
И видимо все inline? Ну программер крут. Я понимаю Dependency Injection сейчас довольно модный тренд, но нафига его сувать туда, где он не дает никакого смысла. Кроме разве что лишних тормозов.
А еще зачем нужны set_url и прочие set_something, если url() возвращают неконстантную ссылку? Видимо, автор решил экономить на памяти, да вот только не в курсе, что Qt-контейнеры используют implicity shared
. ну вообщем цель у него такая было, а заставить его прочитать что такое implicity shared - невозможно...
до этого он вообще все свои переменные облечал в такую ересь -
template <class T>
class ssm_Var
{
public:
ssm_Edit edit;
ssm_Var():edit(DEFAULT_EDIT) {}
ssm_Var(T _var):edit(DEFAULT_EDIT), var(_var){}
inline void set(T _var) {var = _var; } //Устанавливаем Переменную
inline T get() const {return var;} // считываем Переменную
inline T* link() {return &var;} // или указатель на неё
inline T& self() {return var;} // или её же по ссылке
private:
T var; // Переменная, ради которой и создан весь класс
};
потом надоело, в проекте где это есть оставил и начал облачать уже в
template <class T>
class zn_var_def
{
public:
zn_var_def(): def(false) {}
zn_var_def(T _var): def(true), var(_var) {}
inline void set(T _var) {var = _var; def = true;}
inline bool isDefined() {return def;}
inline bool isEmpty() {return !def;}
inline T get() const {return var;}
inline T* link() {return &var;}
inline T& self() {return var;}
private:
bool def;
T var;
};
теперь перешел к описанному в самом начале....
и все это в рамках одного проекта, все переменные в это г обвернуто...
1.5 МБайта (!!!!!) сырцов этого ада.....
может он начитался умных статеек про pimpl, и решил попробовать себя в новом деле, ну подумаешь, хрень получилась
а может он просто дрочит на процесс, гордится собой
кроме того, что всё тут лишнее - и ненужная инкапсуляция с геттерами/сеттерами, и impl *, возвращать неконстантную ссылку из константного метода... если без указателя, то вызывает много вопросов даже у компилятора, видать за этим и указатель! надо же бороть крестопроблемы, в самом деле!
о, а я знаю typedef!
>class impl_set_ftp: QObject
зачем QObject?
>Impl* impl;
FFFFFUUUUUU
QScopedPointer придумали для лохов. Ъпрограммисты не используют смарт-поинтеры. Лучше пусть QObject сам заботиться об удалении impl
до этого он вообще все свои переменные облечал в такую ересь -
template <class T>
class ssm_Var
{
public:
ssm_Edit edit;
ssm_Var():edit(DEFAULT_EDIT) {}
ssm_Var(T _var):edit(DEFAULT_EDIT), var(_var){}
inline void set(T _var) {var = _var; } //Устанавливаем Переменную
inline T get() const {return var;} // считываем Переменную
inline T* link() {return &var;} // или указатель на неё
inline T& self() {return var;} // или её же по ссылке
private:
T var; // Переменная, ради которой и создан весь класс
};
потом надоело, в проекте где это есть оставил и начал облачать уже в
// класс с двумя переменными
template <class T1, class T2>
class zn_var_ab
{
public:
zn_var_ab(){}
zn_var_ab(T1 _a, T2 _b): a(_a), b(_b){}
inline void set_a(T1 _a) {a.set(_a);}
inline void set_b(T2 _b) {b.set(_b);}
inline void set_ab(T1 _a, T2 _b) {a.set(_a); b.set(_b);}
inline T1 get_a() const {return a.get();}
inline T2 get_b() const {return b.get();}
inline T1* link_a() {return a.link();}
inline T2* link_b() {return b.link();}
inline T1& self_a() {return &a.self();}
inline T2& self_b() {return &b.self();}
private:
zn_var<T1> a;
zn_var<T2> b;
};
template <class T>
class zn_var_def
{
public:
zn_var_def(): def(false) {}
zn_var_def(T _var): def(true), var(_var) {}
inline void set(T _var) {var = _var; def = true;}
inline bool isDefined() {return def;}
inline bool isEmpty() {return !def;}
inline T get() const {return var;}
inline T* link() {return &var;}
inline T& self() {return var;}
private:
bool def;
T var;
};
теперь перешел к описанному в самом начале....
и все это в рамках одного проекта, все переменные в это г обвернуто...
1.5 МБайта (!!!!!) сырцов этого ада.....
мыши кололись и плакали