Здравствуйте, Аноним, Вы писали:
А>только через алгоритм for_each(l_temp.begin(), l_temp.end(), ....). А>Пытался через boost::bind, но так и не понял как вызвать код (*i_cur)(_msg) ?????
А>только через алгоритм for_each(l_temp.begin(), l_temp.end(), ....). А>Пытался через boost::bind, но так и не понял как вызвать код (*i_cur)(_msg) ?????
Вот простой пример, скомпилированный с помощью MS VC++ 2010. И мой вам совет на будущее, не используйте boost.
#include"stdafx.h"#include <iostream>
#include <list>
#include <algorithm>
typedef void ( *pf )( int );
void f1( int x )
{
std::cout << "f1( int )\n";
}
void f2( int x )
{
std::cout << "f2( int )\n";
}
void f3( int x )
{
std::cout << "f1( int )\n";
}
void fn( const std::list<pf> &l, int x )
{
std::for_each( l.begin(), l.end(),
[&x]( pf f ){ f( x ); } );
}
int _tmain(int argc, _TCHAR* argv[])
{
std::list<pf> l;
l.push_back( f1 );
l.push_back( f2 );
l.push_back( f3 );
fn( l, 10 );
куегкт ( 0 );
}
Здравствуйте, nen777w, Вы писали:
С>>Вот простой пример, скомпилированный с помощью MS VC++ 2010. И мой вам совет на будущее, не используйте boost. N>Затравка на холивар?
Да просто юношеский максимализм. Стандарт учить, конечно же, хорошо, но и реальные задачи решать иногда приходится, не буквоедством единым...
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, Ops, Вы писали:
Ops>Здравствуйте, nen777w, Вы писали:
С>>>Вот простой пример, скомпилированный с помощью MS VC++ 2010. И мой вам совет на будущее, не используйте boost. N>>Затравка на холивар? Ops>Да просто юношеский максимализм. Стандарт учить, конечно же, хорошо, но и реальные задачи решать иногда приходится, не буквоедством единым...
Это дурной тон, когда то, что можно спокойно сделать с помощью стандартных средств, делают с помощью сторонних библиотек. Это лишь говорит о невысокой квалификации программиста. Во-первых, он совершенно не понимает, что не следует для читающего вашу программу усложнять код и требовать от него знаний каких-то третьесторонних библиотек. Во-вторых, это говорит о том. что программист слабо владеет стандартными средствами и прилюбом мало-малськой трудности бежит искать третьесторонние библиотеки.
Так что речь идет не о каком-то "юношеском максимализме", а о том, что вы еще слабо представляете, что такое хорошо написанный код.
Как раз юношеский максимализм заключается в том, чтобы перед всеми похвастаться, что, молЮ смотрите, сколько я знаю разных библиотек! Поэтому очень часто молодые люди, такие, как вы, спешат чиать boost, не зная в достаточной мере С++, чтобы при поступлении на работу попазировать, мол, вот, я какой крутой, boost знаю! А спросишь его про С++, и оказывается, что он его-то и не знает!
На одном сайте один такой юноша задавал вопрос. Цитирую его буквально по памяти: "Я прочитал уже одну треть книги Шилдта "С++ для начинающих". не подскажите мне, что мне теперь почитать по графическому и сетевому прогграммированию".
Это слово в слово. Я ничсего своего не добавил. Вот точно такая же плеяда появилась молодых программистов, которые прочитали одну треть книги Шилдта "С++ для начинающих" и спешат заявить, что они уже знакомы с boost. На этом же форуме один молодой человек к месту и не кместу всегда ставлял функции из boost, как например, const_begin. Когда я его спросил, зачем вы используете эту функцию для простого приера и включаете дополнительные заголовочные файлы из boost, когда есть стандартная аналогичная глобальная функция std::begin, он очень удивился!
Здравствуйте, Voivoid, Вы писали:
V>Здравствуйте, Аноним, Вы писали:
А>>только через алгоритм for_each(l_temp.begin(), l_temp.end(), ....). А>>Пытался через boost::bind, но так и не понял как вызвать код (*i_cur)(_msg) ?????
Здравствуйте, SCRABER, Вы писали:
SCR>Здравствуйте, Сыроежка, Вы писали:
С>>void fn( const std::list<pf> &l, int x ) С>>{
С>> std::for_each( l.begin(), l.end(), С>> [&x]( pf f ){ f( x ); } ); С>>} С>>[/ccode]
SCR>У меня вот это не компилируется ????? SCR>Embarcadero C++ Builder XE2.
Мораль: давно известно, что продукты Borland никогда не соответствовали стандарту, отставали по внедрению новых положений стандарта и имели заоблочную цену!
Сейчас Embarcadero проводит агрессивную рекламную компанию по протолкиванию своих средств разработки XE2. Теперь буду знать, что не следует покупать их продукты не только изз-за завышенной цены (у них upgrade идет по цене, дороже нового продукта!), но также из-за того, что их компилятор не поддерживает новый стандарт С++. То есть это все равно, что лпатить деньги за то, что уже бесполезно.
Скорей ввего ваш компилчятор не поддерживает лямбда-выражения. если бы вы указали сообщение об ошибке, можно было бы более точно определить причину, почему код не компилируется. Но в любом случае лямбда-выражение можно заменить функциональным объектом.
Здравствуйте, Сыроежка, Вы писали:
С>Здравствуйте, SCRABER, Вы писали:
SCR>>Здравствуйте, Сыроежка, Вы писали:
С>>>void fn( const std::list<pf> &l, int x ) С>>>{
С>>> std::for_each( l.begin(), l.end(), С>>> [&x]( pf f ){ f( x ); } ); С>>>} С>>>[/ccode]
SCR>>У меня вот это не компилируется ????? SCR>>Embarcadero C++ Builder XE2.
С>Мораль: давно известно, что продукты Borland никогда не соответствовали стандарту, отставали по внедрению новых положений стандарта и имели заоблочную цену! С>Сейчас Embarcadero проводит агрессивную рекламную компанию по протолкиванию своих средств разработки XE2. Теперь буду знать, что не следует покупать их продукты не только изз-за завышенной цены (у них upgrade идет по цене, дороже нового продукта!), но также из-за того, что их компилятор не поддерживает новый стандарт С++. То есть это все равно, что лпатить деньги за то, что уже бесполезно.
С>Скорей ввего ваш компилчятор не поддерживает лямбда-выражения. если бы вы указали сообщение об ошибке, можно было бы более точно определить причину, почему код не компилируется. Но в любом случае лямбда-выражение можно заменить функциональным объектом.
К сожалению конкретно сейчас под рукой XE2 нет.
Есть Embarcadero Borland C++ Builder 2010.
Здравствуйте, SCRABER, Вы писали:
SCR>Здравствуйте, Сыроежка, Вы писали:
С>>Здравствуйте, SCRABER, Вы писали:
SCR>>>Здравствуйте, Сыроежка, Вы писали:
С>>>>void fn( const std::list<pf> &l, int x ) С>>>>{
С>>>> std::for_each( l.begin(), l.end(), С>>>> [&x]( pf f ){ f( x ); } ); С>>>>} С>>>>[/ccode]
SCR>>>У меня вот это не компилируется ????? SCR>>>Embarcadero C++ Builder XE2.
С>>Мораль: давно известно, что продукты Borland никогда не соответствовали стандарту, отставали по внедрению новых положений стандарта и имели заоблочную цену! С>>Сейчас Embarcadero проводит агрессивную рекламную компанию по протолкиванию своих средств разработки XE2. Теперь буду знать, что не следует покупать их продукты не только изз-за завышенной цены (у них upgrade идет по цене, дороже нового продукта!), но также из-за того, что их компилятор не поддерживает новый стандарт С++. То есть это все равно, что лпатить деньги за то, что уже бесполезно.
С>>Скорей ввего ваш компилчятор не поддерживает лямбда-выражения. если бы вы указали сообщение об ошибке, можно было бы более точно определить причину, почему код не компилируется. Но в любом случае лямбда-выражение можно заменить функциональным объектом.
SCR>К сожалению конкретно сейчас под рукой XE2 нет. SCR>Есть Embarcadero Borland C++ Builder 2010.
SCR>Ошибка: SCR>[BCC32 Error] File1.cpp(31): E2188 Expression syntax SCR> File1.cpp(29): parsing: void fn(const std::list<void (*)(int),std::allocator<void (*)(int)> > &,int)
Я не вижу здесь синтаксической ошибки. Данное предложение
void fn( const std::list<pf> &l, int x )
из определения функции fn корректно, тем более, что я просто скопировал сюда уже оттранслированный код.
А есть ли еще дполнительные сообщения кроме данного аскетского сообщения? Вполне возможно, что это сообщение — реакция на ошибку, которая расположена в коде перед этой строкой.
Есть два варианта. Сначала закоментируйте предложение в функции main, где происходит вызов алгоритма for_each. Если код скомпилируется, то значит данное сообщение об ошибке есть не является следствием синтаксической ошибке.
Второе — я хорошо помню, что компиляторы Borland не могли работать с квалификатором const у массивов и контейнеров, когда те использовались со стандартными алгоритмами. То есть компилятор при инстанциировании шаблонов не справлялся с квалификатором const.
Поэтому когда выполните первую проверку, и код у вас скомпилируется ( в чем я не сомневаюсь, если только вы не сделали опечатку ), то просто уберите в объявлении первого параметра функции квалификатор const
Здравствуйте, Сыроежка, Вы писали:
С>Я не вижу здесь синтаксической ошибки. Данное предложение
С>void fn( const std::list<pf> &l, int x )
С>из определения функции fn корректно, тем более, что я просто скопировал сюда уже оттранслированный код. С>А есть ли еще дполнительные сообщения кроме данного аскетского сообщения? Вполне возможно, что это сообщение — реакция на ошибку, которая расположена в коде перед этой строкой. С>Есть два варианта. Сначала закоментируйте предложение в функции main, где происходит вызов алгоритма for_each. Если код скомпилируется, то значит данное сообщение об ошибке есть не является следствием синтаксической ошибке.
С>Второе — я хорошо помню, что компиляторы Borland не могли работать с квалификатором const у массивов и контейнеров, когда те использовались со стандартными алгоритмами. То есть компилятор при инстанциировании шаблонов не справлялся с квалификатором const. С>Поэтому когда выполните первую проверку, и код у вас скомпилируется ( в чем я не сомневаюсь, если только вы не сделали опечатку ), то просто уберите в объявлении первого параметра функции квалификатор const
Никаких других ошибок компилятор не выдает.
Вообщем то он ругается не на объявление функции, а на строку
std::for_each( l.begin(), l.end(), [&x]( pf f ){ f( x ); } );
Если ее за комментировать, то все компилится.
void fn( const std::list<pf> &l, int x )
{
// std::for_each( l.begin(), l.end(), [&x]( pf f ){ f( x ); } ); // it's ok
}
Слудующий код:
void fn( std::list<pf> &l, int x )
{
std::for_each( l.begin(), l.end(), [&x]( pf f ){ f( x ); } ); // error
}
увы ошибка парсинга. Скорее всего компилятор не поддерживает синтаксиси лямбда-выражений.
Где можно посмотреть на синтаксис лямбда-выражений для С++, а то все встречается для С#?
Здравствуйте, SCRABER, Вы писали:
SCR>Здравствуйте, Сыроежка, Вы писали:
С>>Я не вижу здесь синтаксической ошибки. Данное предложение
С>>void fn( const std::list<pf> &l, int x )
С>>из определения функции fn корректно, тем более, что я просто скопировал сюда уже оттранслированный код. С>>А есть ли еще дполнительные сообщения кроме данного аскетского сообщения? Вполне возможно, что это сообщение — реакция на ошибку, которая расположена в коде перед этой строкой. С>>Есть два варианта. Сначала закоментируйте предложение в функции main, где происходит вызов алгоритма for_each. Если код скомпилируется, то значит данное сообщение об ошибке есть не является следствием синтаксической ошибке.
С>>Второе — я хорошо помню, что компиляторы Borland не могли работать с квалификатором const у массивов и контейнеров, когда те использовались со стандартными алгоритмами. То есть компилятор при инстанциировании шаблонов не справлялся с квалификатором const. С>>Поэтому когда выполните первую проверку, и код у вас скомпилируется ( в чем я не сомневаюсь, если только вы не сделали опечатку ), то просто уберите в объявлении первого параметра функции квалификатор const
SCR>Никаких других ошибок компилятор не выдает. SCR>Вообщем то он ругается не на объявление функции, а на строку
SCR>
SCR>std::for_each( l.begin(), l.end(), [&x]( pf f ){ f( x ); } );
SCR>
SCR>Если ее за комментировать, то все компилится. SCR>
SCR>void fn( const std::list<pf> &l, int x )
SCR>{
SCR>// std::for_each( l.begin(), l.end(), [&x]( pf f ){ f( x ); } ); // it's ok
SCR>}
SCR>
SCR>Слудующий код:
SCR>
SCR>void fn( std::list<pf> &l, int x )
SCR>{
SCR> std::for_each( l.begin(), l.end(), [&x]( pf f ){ f( x ); } ); // error
SCR>}
SCR>
SCR>увы ошибка парсинга. Скорее всего компилятор не поддерживает синтаксиси лямбда-выражений. SCR>Где можно посмотреть на синтаксис лямбда-выражений для С++, а то все встречается для С#?
Да, скорей всего ваш компилятор BBorland не поддерживает лямбда-выражения. Достаточно хорошо вместе с познавательными примерами лямбда-выражения описаны у Майкрософт. Посмотрите здесь.
Также на моей страничке, которая указана ниже, в различных темах раздела С/С++, например, "Два языка С++ в одном яззыке", "Вывод на консоль — широкий выбор средств в С++" имеются наглядные простые примеры использования лямбда-выражений. Кроме того мною описаны различные баги лямбда-выражений в компиляторе MS VC++ 2010. Они полезны тем, что демонстрируют, как правильно должны работать лямбда-выражения. Ну, и конечно нужно читать стандарт С++.
Конечно, компилятор виноват. И куча других других тоже не скомпилируют. Все виноваты, кроме Сыроежки, который выучил последний стандарт, а остальные отправил на помойку, и поучает не пользоваться ничем, кроме еще несуществующих компиляторов, которые возможно когда-нибудь будут этот стандарт полностью поддерживать.
Только вот писать-то надо сейчас, и на том, что есть.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, Ops, Вы писали:
Ops>Здравствуйте, Сыроежка, Вы писали:
Ops>Конечно, компилятор виноват. И куча других других тоже не скомпилируют. Все виноваты, кроме Сыроежки, который выучил последний стандарт, а остальные отправил на помойку, и поучает не пользоваться ничем, кроме еще несуществующих компиляторов, которые возможно когда-нибудь будут этот стандарт полностью поддерживать. Ops>Только вот писать-то надо сейчас, и на том, что есть.
Лямбда-выражения -это ничто иное, как "синтаксический сахар", который вполне легко и безболезненно заменяется функциональными объектами. Так что если есть потребность писать код "сейчас на том, что есть", то очевидно стоит обратить свое внимание в первую очередь на стандартные конструкции с использованием функциональных объектов. Тогда ваш код будет переносим, соответствовать стандарту и не будет зависеть от третьесторонних библиотек.
Посмотрите непредвзято и хладнокровно на то, как разворачивается обсуждение исхоодного вопроса темы.
Я предложил использовать стандартные средства языка
void fn( const std::list<pf> &l, int x )
{
std::for_each( l.begin(), l.end(),
[&x]( pf f ){ f( x ); } );
}
Допустим, что ваш компилятор не поддерживает лямбда-выражения. Но приведенный код с лямбда выражением настолько прозрачен и поонятен, что очень легко написать функциональный объект. То есть конструкция лямбда-выражения вида [&x] эквивалентна тому, что конструктору функционального объекта нужно передать аргумент, ссылка на который или само значение будут храниться в функциональном объекте и использоваться при вызове оператор-функции.
То есть проблем никаких нет.
А что мы видим из обсуждения? Очевидно, что автор темы ранее не имел опыта написания функциональных объектов. Вместо того, чтобы такой опыт приобрести, который обязателен для каждого программиста С++, он сразу же начинает хвататься за boost! При этом в boost код достаточно сложнее для изучения, могут быть побочные эффекты, о которых вы даже не подозреваете, так как ваш компилятор может иметь собственные особенности поведения. К тому же выбудете вынуждены будете тянуть за собой кишку заголовочных файлов из boost, а также подключать к вашему проекту библиотеки boost. И все это ради замены простого функционального объекта.
Как известно, компиляторы очень быстро обновляются. например, тот же майкрософт сейчас каждый год обновляет свой компилятор. Уже анонсировали MS VC++ 11.
Представьте теперь, что в ваше проект придет новый сотрудник. Он увидет такие ваши ухищрения ради простого объекта, крайне удивится, почему такие вещи так сложно делаются, тем более, что новый компилятор предоставляет еще более эффективные и выразительные средства, и покрутит пальцем у виска, глядя на вас!
Но хуже того, теперь вы уже вынуждены будете тянуть эти библиотеки boost, функциональность которых полностью дублируется стандартными средствами. Ваш проект будет огромен и плохо управляем, так как если возникнет какая-то ошибка, то вам придется проверять все места в коде, а значит все подключаемые библиотеки, чтобы найти причину ошибки.
Фактически, ваш код превращаются в сборную солянку, где из-за каждого "чиха" подключается некая третьесторонняя библиотека, которая к тому же гарантирует, что в ней самой нет багов! Так как исправленичя вносились и вносятся и в boost. Вам трудно будет поддерживать общий стиль программирования проекта, так как вы вынуждены быдете либо использовать старые средства boost, которые уже морально устарели, либо использовать новые возможности стандарта. И эта дилемма постоянно вам будет мешать в развитии проекта.
Вам приходится предъявлять малообоснованные требования к новым сотрудникам. Ээффективность работы группы в связи с этим резко снижается, так новому сотруднику надо изучать все ваши искусственно-насаждаемые примочки. А самое главное у нового сотрудника будет отторжение ваших примочек, так как он хорошо знает, что это можно легко и более выразительно сделать с помощью стандартных средств.
С>А что мы видим из обсуждения? Очевидно, что автор темы ранее не имел опыта написания функциональных объектов. Вместо того, чтобы такой опыт приобрести, который обязателен для каждого программиста С++, он сразу же начинает хвататься за boost!
Честно говоря про функциональные объекты мне известно. Они неплохо описаны у Майерса. С чего вы сделали вывод про меня непонятно. Да ну ладно.
За boost я схватился только из-за того, чтобы поставить себе цель не составляя дополнительного кода (в виде функциональных объектов) написать одной строкой.
Вариант с лябмда-выражением мне конечно же показался более удачным по отношению написания кода, так как гарантирует переносимость, но в связи с ограничениями используемого мной компилятора отказался и предпочел воспользоваться библиотекой boost, чтобы изучить и этот вопрос по глубже. В конце концов каждый должен знать несколько способов решений одной и той же задачи, чтобы в будущем уметь применить свой накопленный опыт.
Как вы думаете что будет выигрывать по скорости работы лямбда-выражения или функциональный объект ???
С>Как известно, компиляторы очень быстро обновляются. например, тот же майкрософт сейчас каждый год обновляет свой компилятор. Уже анонсировали MS VC++ 11. С>Представьте теперь, что в ваше проект придет новый сотрудник. Он увидет такие ваши ухищрения ради простого объекта, крайне удивится, почему такие вещи так сложно делаются, тем более, что новый компилятор предоставляет еще более эффективные и выразительные средства, и покрутит пальцем у виска, глядя на вас! С>Но хуже того, теперь вы уже вынуждены будете тянуть эти библиотеки boost, функциональность которых полностью дублируется стандартными средствами. Ваш проект будет огромен и плохо управляем, так как если возникнет какая-то ошибка, то вам придется проверять все места в коде, а значит все подключаемые библиотеки, чтобы найти причину ошибки. С>Фактически, ваш код превращаются в сборную солянку, где из-за каждого "чиха" подключается некая третьесторонняя библиотека, которая к тому же гарантирует, что в ней самой нет багов! Так как исправленичя вносились и вносятся и в boost. Вам трудно будет поддерживать общий стиль программирования проекта, так как вы вынуждены быдете либо использовать старые средства boost, которые уже морально устарели, либо использовать новые возможности стандарта. И эта дилемма постоянно вам будет мешать в развитии проекта. С>Вам приходится предъявлять малообоснованные требования к новым сотрудникам. Ээффективность работы группы в связи с этим резко снижается, так новому сотруднику надо изучать все ваши искусственно-насаждаемые примочки. А самое главное у нового сотрудника будет отторжение ваших примочек, так как он хорошо знает, что это можно легко и более выразительно сделать с помощью стандартных средств.
Здравствуйте, Сыроежка, Вы писали:
С>Здравствуйте, Ops, Вы писали:
С>Посмотрите непредвзято и хладнокровно на то, как разворачивается обсуждение исхоодного вопроса темы.
С>Я предложил использовать стандартные средства языка
С>
С>void fn( const std::list<pf> &l, int x )
С>{
С> std::for_each( l.begin(), l.end(),
С> [&x]( pf f ){ f( x ); } );
С>}
С>
С>Допустим, что ваш компилятор не поддерживает лямбда-выражения. Но приведенный код с лямбда выражением настолько прозрачен и поонятен, что очень легко написать функциональный объект. То есть конструкция лямбда-выражения вида [&x] эквивалентна тому, что конструктору функционального объекта нужно передать аргумент, ссылка на который или само значение будут храниться в функциональном объекте и использоваться при вызове оператор-функции. С>То есть проблем никаких нет.
Тут согласен.
С>А что мы видим из обсуждения? Очевидно, что автор темы ранее не имел опыта написания функциональных объектов. Вместо того, чтобы такой опыт приобрести, который обязателен для каждого программиста С++, он сразу же начинает хвататься за boost! При этом в boost код достаточно сложнее для изучения, могут быть побочные эффекты, о которых вы даже не подозреваете, так как ваш компилятор может иметь собственные особенности поведения.
Особенности есть скорее у библиотек студии, если взять тот же bind, то он в 2010 багнутый, а бустовский работает нормально.
С>К тому же выбудете вынуждены будете тянуть за собой кишку заголовочных файлов из boost, а также подключать к вашему проекту библиотеки boost. И все это ради замены простого функционального объекта.
Ради одного конечно не стоит, но когда их будут тысячи, можно и потаскать.
С>Как известно, компиляторы очень быстро обновляются. например, тот же майкрософт сейчас каждый год обновляет свой компилятор. Уже анонсировали MS VC++ 11.
А многие еще на 6 пишут, и не из-за лени и нищебродства, а по объективным причинам.
С>Представьте теперь, что в ваше проект придет новый сотрудник. Он увидет такие ваши ухищрения ради простого объекта, крайне удивится, почему такие вещи так сложно делаются, тем более, что новый компилятор предоставляет еще более эффективные и выразительные средства, и покрутит пальцем у виска, глядя на вас!
Мне как-то наплевать на его мнение. Проекты существуют годами, и переделывать их из-за появления нового стандарта ни один разумный человек не будет.
С>Но хуже того, теперь вы уже вынуждены будете тянуть эти библиотеки boost, функциональность которых полностью дублируется стандартными средствами. Ваш проект будет огромен и плохо управляем, так как если возникнет какая-то ошибка, то вам придется проверять все места в коде, а значит все подключаемые библиотеки, чтобы найти причину ошибки. С>Фактически, ваш код превращаются в сборную солянку, где из-за каждого "чиха" подключается некая третьесторонняя библиотека, которая к тому же гарантирует, что в ней самой нет багов! Так как исправленичя вносились и вносятся и в boost. Вам трудно будет поддерживать общий стиль программирования проекта, так как вы вынуждены быдете либо использовать старые средства boost, которые уже морально устарели, либо использовать новые возможности стандарта. И эта дилемма постоянно вам будет мешать в развитии проекта.
А если не использовать сторонних библиотек, то получится гора из велосипедов, с которыми разбираться еще сложнее. Не говоря уже о том, что разработка будет стоить намного дороже.
В этом плане буст, не смотря на все его недостатки, как раз одна из лучших библиотек, оттуда многое переходит в стандарт с минимальными изменениями, только эти фичи появляются в нем на годы раньше. К сожалению, иногда приходится использовать гораздо менее качественные библиотеки, и в реальном проекте никуда от этого не деться.
С>Вам приходится предъявлять малообоснованные требования к новым сотрудникам. Ээффективность работы группы в связи с этим резко снижается, так новому сотруднику надо изучать все ваши искусственно-насаждаемые примочки. А самое главное у нового сотрудника будет отторжение ваших примочек, так как он хорошо знает, что это можно легко и более выразительно сделать с помощью стандартных средств.
Вполне обоснованные требования, лучше потратить пару месяцев на освоение библиотеки, чем потом на каждый чих по 2 недели писать новый велосипед.
Советую немножко перестать теоретизировать, и поучаствовать в реальном проекте. Я думаю, ты или изменишь мнение о библиотеках, или завалишь сроки.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.