Russian Qt Forum
Ноябрь 23, 2024, 04:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 8 9 [10] 11 12 ... 16   Вниз
  Печать  
Автор Тема: Приватные методы  (Прочитано 102276 раз)
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #135 : Сентябрь 30, 2015, 23:29 »

Igors
Да-да, очень крутая, компилируется быстро, размер бинарника совсем не увеличивает и АПИ простое и понятное.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #136 : Октябрь 01, 2015, 00:39 »

Буст, конечно, то ещё говно,

Ещё один "Практик", адепт финдреплейсов)

А может всё-таки проблема не в бусте вовсе, мм)



 
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #137 : Октябрь 01, 2015, 00:58 »

терять в эффективности ради
жалкой попытки защищать инвариант от конченных дибилов - напрасная трата времени и сил.

А потом мы удивляемся, а почему же новый софт еле-еле взлетает на суперкрутом Ксеоне...


и как это коррелирует с моим нежеланием терять в эффективности на пустом месте?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #138 : Октябрь 01, 2015, 01:34 »

Буст, конечно, то ещё говно,

Ещё один "Практик", адепт финдреплейсов)

А может всё-таки проблема не в бусте вовсе, мм)

Я вот ради интереса поглядел сонным глазом в первый попавшийся файлик из дустовой кучи... Впечатление: нафталин из 80-х, попытка создать свое расширение языка на базе макросов и шаблонов... ну вот например:

Код:
    

typedef boost::tuple<int,std::string,int> tuple;

    vector<tuple> v = tuple_list_of( 1, "foo", 2 )( 3, "bar", 4 );
    BOOST_CHECK( v.size() == 2 );
    BOOST_CHECK( boost::get<0>( v[1] ) ==  3 );

 Вот что должен подумать инженер,  увидя подобный код? Что он делает? Что за криптография? Как такое поддерживать?

Может, оно не все такое, хз. Но просто в глаза бросилось.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #139 : Октябрь 01, 2015, 02:31 »


Я вот ради интереса поглядел сонным глазом в первый попавшийся файлик из дустовой кучи... Впечатление: нафталин из 80-х, попытка создать свое расширение языка на базе макросов и шаблонов... ну вот например:

Код:
    

typedef boost::tuple<int,std::string,int> tuple;

    vector<tuple> v = tuple_list_of( 1, "foo", 2 )( 3, "bar", 4 );
    BOOST_CHECK( v.size() == 2 );
    BOOST_CHECK( boost::get<0>( v[1] ) ==  3 );

 Вот что должен подумать инженер,  увидя подобный код? Что он делает? Что за криптография? Как такое поддерживать?

Может, оно не все такое, хз. Но просто в глаза бросилось.

что создаются кортежи, и запихиваются в вектор.
далее идет проверка пост-условий.

ну что из представленного кода вам непонятно?
это же тривиальный код.
тупли кстати, уже давно часть стандарта.

и казалось бы, причем тут нафталин из 80х?

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

те же тупли имеют широкое применения в метапрограммировании
с целью автоматической генерации структур
содержащих поля различных типов.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #140 : Октябрь 01, 2015, 05:42 »

Код:
    

typedef boost::tuple<int,std::string,int> tuple;

    vector<tuple> v = tuple_list_of( 1, "foo", 2 )( 3, "bar", 4 );
    BOOST_CHECK( v.size() == 2 );
    BOOST_CHECK( boost::get<0>( v[1] ) ==  3 );

 Вот что должен подумать инженер,  увидя подобный код? Что он делает? Что за криптография? Как такое поддерживать?
По примеру хорошо понятно. Без этого пришлось бы объявлять структуру (int, string, int), делать ей конструктор, а так лихо схлопывается десятка полтора строчек. Но закрыв пример - я не смог бы его воспроизвести Улыбающийся Надо помнить tuple_list_of, причудливый get и.т.п. Конечно, если этим плотно заниматься, запомнится. Но так есть риск увлечься и заниматься "непрерывным изучением" - увы, так и произошло с нашим молодым товарищем. 

Т.е. порог вхождения высоковат, а каких-то немедленных выгод (как в Qt) не видно, ну объявлю я еще структуру - не переломлюсь. Зато никаких запоминаний не потребуется. В команде кто-то на бусте, а кто-то нет быстро станет невыносимо, поэтому решение запретить имеет резоны.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #141 : Октябрь 01, 2015, 06:41 »

Но так есть риск увлечься и заниматься "непрерывным изучением" - увы, так и произошло с нашим молодым товарищем.
И теперь ему не придется тратить по пол месяца, что бы разобраться с пулами в бусте и написать себе эффективное решение за 15 минут. Это действительно страшно. Улыбающийся
Лучше ничего не изучать, а спрашивать здесь, на форуме. Улыбающийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #142 : Октябрь 01, 2015, 09:31 »


 Вот что должен подумать инженер,  увидя подобный код? Что он делает? Что за криптография? Как такое поддерживать?

Ну тут уже дважды нарушено правило - не перегружать операторы без необходимости. Во-первых, это оператор(), который в бусте любят перегружать по поводу и без. Во вторых, у структуры, возвращаемой tuple_list_of, судя по всему, перегружен оператор vector<tuple>(), что вообще адище (и, возможно, operator list). А deque перегружен? А буст интрузив? А как мне теперь запихать это в QVector без копирования?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #143 : Октябрь 01, 2015, 11:52 »

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

Понимаете ли... Оправдывать плохой дизайн можно задумкой архитектора, недостатки языка - неправильным использованием, ограниченность - теоретическими возможностями расширения. Но, как мне кажется, если человек начинает расширять язык направо и налево - значит, ему ЭТОТ язык не нужен. Ему нужно использовать другой язык.

Можно макросами определить, например, #define BEGIN { и #define END }. Но тогда вопрос - а может, просто стоит писать на Паскале и не умничать?

Можно купить велосипед и приделать к нему еще 2 колеса. Но, может быть, лучше купить квадроцикл или машину?
Ибо такой велосипед будет ехать объективно хуже нормального квада.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #144 : Октябрь 01, 2015, 12:16 »

Ну тут уже дважды нарушено правило - не перегружать операторы без необходимости. Во-первых, это оператор(), который в бусте любят перегружать по поводу и без. Во вторых, у структуры, возвращаемой tuple_list_of, судя по всему, перегружен оператор vector<tuple>(), что вообще адище (и, возможно, operator list). А deque перегружен? А буст интрузив? А как мне теперь запихать это в QVector без копирования?
list_of использует конструктор вида Container( InputIt first, InputIt last ), который почему-то для QVector определить забыли.
Если вы добавите такой конструктор, то легко сможете использовать с list_of и QVector:
Код
C++ (Qt)
template<typename T>
class MyVector : public QVector<T>
{
public:
template< class InputIt >
MyVector<T>( InputIt first, InputIt last )
{
this->reserve( std::distance( first, last ) );
for( InputIt it = first; it != last; ++it )
this->append( *it );
}
};
 
int main( int argc, char *argv[] )
{
typedef boost::tuple<int,std::string,int> tuple;
 
MyVector<tuple> v = tuple_list_of( 1, "foo", 2 )( 3, "bar", 4 );
BOOST_ASSERT( v.size() == 2 );
BOOST_ASSERT( boost::get<0>( v[1] ) ==  3 );
}
 
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #145 : Октябрь 01, 2015, 13:23 »

Old
Вы не до конца правы. Он, безусловно, использует этот конструктор (а мог и не использовать), но этот конструктор используется в
Код:
        template< class Container >
        operator Container() const
        {
            return this-> BOOST_NESTED_TEMPLATE convert_to_container<Container>();
        }
Очень безопасно.
« Последнее редактирование: Октябрь 01, 2015, 13:26 от Авварон » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #146 : Октябрь 01, 2015, 13:43 »

Очень безопасно.
Так а что не так?
list_of можно использовать со всем, что умеет MySuperClass( InputIt first, InputIt last ), т.е. со всем, что может получать какие-то серии элементов.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #147 : Октябрь 01, 2015, 13:44 »

Цитировать
return this-> BOOST_NESTED_TEMPLATE convert_to_container<Container>();

ОМГ, прелесть то какая Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #148 : Октябрь 01, 2015, 13:58 »

Цитировать
return this-> BOOST_NESTED_TEMPLATE convert_to_container<Container>();

ОМГ, прелесть то какая Улыбающийся
То Вы не понимаете! "Настоящий" программист должен держать в голове все это страхомудие, остальные так, программисты "средние".

Однако находятся такие кто не видит здесь никакого "творческого элемента", скорее это печальная расплата за обещанную "общность". Ну (допустим) выучу я BOOST_NESTED_TEMPLATE и даже convert_to_container, и что? Как это подымет мой (жалкий) уровень?  Это ж тупейшая зубрежка - и ничего более. Никогда не понимал в чем кайф "запоминающего"  Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #149 : Октябрь 01, 2015, 14:03 »

Это ж тупейшая зубрежка - и ничего более.
Конечно. Это исходники буста, зачем туда лезть без дела? А тем более что-то зазубривать? Улыбающийся
boost можно использовать не зная всех этих подробностей.
« Последнее редактирование: Октябрь 01, 2015, 14:08 от Old » Записан
Страниц: 1 ... 8 9 [10] 11 12 ... 16   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.198 секунд. Запросов: 23.