Как стать автором
Обновить
1
0

Пользователь

Отправить сообщение
Зачем тебе именно механика? Эта ведь клавиатура для работы, а не для киберспорта.
sqlite — безусловно хорошая штука. Пользовался ей в нескольких проектах, единственное что огорчает — отсутствие враппера для С++ в стандартной поставке, в результате их пишут все кому не лень (да и чего скрывать — я тоже свой писал, т.к. не нашел подходящего под свои требования). А без враппера юзать sqlite не очень удобно, в плюсах разумеется.
Чтобы экономить место, нужно настроить autohide для боковых и нижних панелей, чтобы не скрывать их по ctrl+M, делается это очень легко — на каждом pane все есть кнопочка с минимизацией. Как это выглядит у меня можно посмотреть здесь.

Лично я себе настроил хоткеи для открытия project view (f1), console (alt+тильда), make targets (ctrl+тильда), плюс еще некоторые которые нужны конкретно мне — и живу счастливо. В результате добился существенного прироста в скорости и удобства в работе с IDE, т.к. все по нажатию нужных мне хоткеев открывается нужный view и туда устанавливается фокус, так что я сразу могу продолжать с ним работать без лишних движений мыши. И кроме того view можно растягивать на необходимую длину/ширину, у меня обычно больше половины экрана project view занимает, и консоль тоже нет 5-10 строк, а все 30-40 — это на мой взгляд гораздо удобнее, и все это благодаря autohide. Как это выглядит можно посмотреть здесь.

Да, и кстати, тулбар тоже абсолютно бесполезен при использовании хоткеев, я его тоже скрываю.

Насчет темы вообще не парюсь, т.к. подавляющее количество времени проводится в непосредственно редакторе, а его цветовую схему можно достаточно легко настроить.
В boost уже есть реализация — strong typedef.

#include <iostream>
#include <boost/strong_typedef.hpp>

BOOST_STRONG_TYPEDEF(int, galosh_count_t);
BOOST_STRONG_TYPEDEF(int, cow_count_t);

void print (galosh_count_t count)
{
     std::cout << "У меня есть " << count << " пар галош!" << std::endl;
}

void print (cow_count_t count)
{
     std::cout << "У меня есть " << count << " коров!" << std::endl;
}

void print (galosh_count_t galosh_count, cow_count_t cow_count)
{
    std::cout << "У меня есть " << galosh_count << " пар галош и " << cow_count << " коров!" << std::endl;
}

int main (int, char*[])
{
    galosh_count_t galosh_count(10);
    cow_count_t cow_count(15);    

    print (galosh_count, cow_count); 
    // print (cow_count, galosh_count); // здесь будет ошибка компиляции

    print (galosh_count);
    print (cow_count);
    return 0;
}

Переучиваться? Современные IDE позволяют настроить coding style и сами будут все подчищать следуя заданным настройкам.
Половина материала (если не больше) в статье относится к документу типа coding style, который должен быть, если в проекте работает более одного разработчика.
Ну, буст лямбда вообще противопоказано использовать для продакшен кода, если целью конечно не стоит показать коллегам свою «крутость», а потом заставить их ночью с тонной матов отлаживать такой код или рефакторить его при добавлению какого-нибудь нового параметра в функцию.

Конечно, это все круто выглядит, но какие преимущества это дает? Вот вы приводите абстрактный пример с А = 5 + 10 * В, ну он настолько абстрактен, что не показывает ровным счетом ничего. Было бы гораздо лучше если бы вы привели в пример реализацию чего-либо стоящего с помощью каррирования, где были бы видны его преимущества по сравнению с обычными подходами. Я лично ничего не вижу ни одного преимущества в каррировании для С++, только существенный недостаток — усложнение кода.
Честно говоря я вообще не понял, в чем смысл превращать это:
cout << foo("Кока-кола", 2, 9.95) << endl;  // => Кока-кола: 2 л. = 9.95$

в это:
 cout << mega::curry(foo)("Кока-кола")(2)(9.95) << endl;  // => Кока-кола: 2 л. = 9.95$


Ну, а биндинг параметров с помощью лямбд делается вообще очень просто в С++0х:
string foo(string s, int i, double d);

auto fooCola = [](int i, double d) { return foo("Coca-cola", i, d); };
auto fooCola2Litra = [&](double d) { return fooCola(2, d); };
fooCola2Litra(9.95);

Выглядит на мой взгляд намного проще и не требует какого-либо дополнительно кода для реализации.
хм, советую обротить внимание на libconfig.

Why Another Configuration File Library?

There are several open-source configuration file libraries available as of this writing. This library was written because each of those libraries falls short in one or more ways. The main features of libconfig that set it apart from the other libraries are:
  • A fully reentrant parser. Independent configurations can be parsed in concurrent threads at the same time.
  • Both C and C++ bindings, as well as hooks to allow for the creation of wrappers in other languages.
  • A simple, structured configuration file format that is more readable and compact than XML and more flexible than the obsolete but prevalent Windows “INI” file format.
  • A low-footprint implementation (just 37K for the C library and 76K for the C++ library) that is suitable for memory-constrained systems.
  • Proper documentation.

Почему нельзя? Если то что выделяет память, является интеллектуальным пулом (garbage collector'ом), то он может сам удалять обьекты при своем разрушении.
struct foo
{
	~foo()
	{
		std::cout << "~foo() called\n";
	}
};

boost::object_pool<foo> FooPool;
foo * f = FooPool.malloc();


Деструктор foo будет вызван, при уничтожении FooPool.

Кстати, говоря я создал аналогичный тест с использованием boost pool (multithreaded) и результаты получились даже чуть лучше.

boost pool example
#include <boost/pool/pool.hpp>
#include <boost/pool/object_pool.hpp>
#include <boost/chrono.hpp>
#include <boost/function.hpp>
#include <iostream>

struct Node
{
    Node * _next;
};

class Timer
{
public:
    Timer(bool isStart = false)
    {
        if (isStart)
            start();
    }

    void start()
    {
        _start = boost::chrono::system_clock::now();
    }

    void stop()
    {
        _end = boost::chrono::system_clock::now();
    }

    double elapsed()
    {
        boost::chrono::duration<double> d = _end - _start;
        return d.count();
    }

private:
    typedef boost::chrono::system_clock::time_point time_point;
    time_point _start;
    time_point _end;
};

class ScopeTimer : public Timer
{
public:
    typedef boost::function<void (double elapsedTime)> Callback;
    ScopeTimer(Callback callback) : Timer(false), _callback(callback)
    {
        start();
    }

    ~ScopeTimer()
    {
        stop();
        _callback(elapsed());
    }

private:
    Callback _callback;    
};

void printElapsedTime(double elapsedTime)
{    
    std::cout << elapsedTime << "\n";
}

int main()
{   
    std::cout.precision(10);
    std::cout.setf(std::ios::fixed, std::ios::floatfield);

    {
	boost::object_pool<Node> NodePool;			
	{
	     ScopeTimer timer(printElapsedTime);
             for (int i = 0; i < 10000000; i++)
		  Node* v = NodePool.malloc();
	}	
	//std::cin.get(); // в диспетчере задач будет видно, что память выделена, т.к. NodePool еще живой
    }
    //std::cin.get(); // в диспетчере задач будет видно, что что память очищена, т.к. NodePool уже уничтожен

    return 0;
}


VS10 со стандартным release билд модом выдает результат ~ 50 мс.
mingw 4.6 с -O2 ~ 60 мс.
Естественно это результаты на моей машине под win7.
Я думаю будет в тему добавить ссылку на доклад от Chandler Carruth — Refactoring C++ with Clang.
www.youtube.com/watch?v=yuIOGfcOH0k&feature=plcp
В нем объясняется и показывается на конкретном примере реализация ренейма метода.
Пардон, у меня теги не работают (вставлял линк в мессадже выше): habrahabr.ru/post/129202/
Я тоже искал готовые решения, но не нашел. Поэтому сделал свою фабрику. Я старался сделать ее максимально гибкой, и без использования макросов. По умолчанию все обьекты регистрируется динамически во время выполнения, но никто не мешает сделать статический инициализатор.
А зачем давать правильный ответ на секретный вопрос, если можно написать что угодно? Наоборот хорошая фишка, чтобы запутать бедного кулхацкера, который будет вбивать имя твоей собаки, который у тебя никогда не было.
Почему-то еще все забывают такую важную вещь в сборке, как конфигурирование… например, как настроить include/lib paths для 3rd party библиотек. Конечно, если по старинке делать как в make, т.е. писать/генерить через configure.sh, но уже не 1999 год. Такие вещи должны включаться в систему сборки, как must have.
Для начала стоит определится со специализацией (или специализациями), которую хочется получить. Веб, базы данных, прикладной, системный программист — возможно что-то забыл, а потом уже формировать список книг/курсов для изучения. Все изучить не получится, объем знаний/технологий слишком велик.

Хороший человек (с ваших слов) посоветовал вам список, но как тут многие уже написали сами по себе в отдельности книги хорошие, но прочитать и тем более понять хотя бы их часть новичку — невозможно, если он ни супер-гик и вундеркинд какой-нибудь.
Лучше выделить в функцию, имя которой будет полностью оправдывать ее назначение.
Еще забыли упоминуть, не только о том что могут быть выброшены исключения во время работы с выделенными ресурсами, и тогда такой код:
int *myPixels = new int[640 * 480];
// работаем
delete [] pixels;

Так же может генерировать утечки памяти, а вы написали — В принципе, никакой разницы.
Тег source не работает. Вот здесь то что я хотел написать: pastebin.com/7tXSfmJE
QMap requests

Ну typedef же напрашивается!

typedef QPair UrlPair;
typedef QPair ObjectUrlPair;
typedef QMap RequestMap;
RequestMap requests;

ЗЫ Для первых 2-х конечно имена нужно подобрать, которые будут более хорошо объяснять контекст, я просто сходу написал.
Да, Eclipse раньше был не очень. Тоже, где-то в 2007-2008 году пробовал его (как IDE для С++), ужасно не понравился — тормоза, косячный автокомплит, на netbeans тогда перешел. А вот сейчас eclipse намного лучше стал (я им пользуюсь почти год как основной ide для плюсов), во всяком случае он гораздо лучше чем голая visual studio. Ну, а под linux и подавно. Единственное, что 64 битные версии какие-то не очень. Под виндой они у меня крашились часто, поэтому сейчас использую 32 битную. Под линуксом такой проблемы не заметил.

Информация

В рейтинге
Не участвует
Откуда
Тегусигальпа, Тегусигальпа, Гондурас
Зарегистрирован
Активность