пятница, 28 марта 2008 г.

Boost + CBuilder

Все утро пытаюсь подружить boost и борландовский C++Builder 6.0
Билдер матерно ругается и ни в какую не хочет собирать код содержащий включения boost.

Чуть позже добавлено...
Как оказалось Builder не поддерживает вложенные шаблоны и посему использовать его в связке с boost - дохлый номер. Еще один довод в пользу того, чтобы забыть эту среду разработки как страшный сон. Жаль, на работе приходится с ней возиться :(

При попытке объявить что нибудь типа

template class A
{
template class B {};
template<> class B {};
};
...
A a;
...

Invalid template declarator list,
F1004 Internal Compiler Error at 0xc808c1 with base 0xc10000

среда, 26 марта 2008 г.

Кое-какие трюки

1. Запись блока операторов в одну строку через запятую:
Оказывается запись:
{
a=3;
b=4;
c=1;
}
Равносильна записи:
a=3, b=4, c=1;

2. Можно еще и так:
float a = (flag ? sin : cos)(x);
В данном случае результатом выполнения (flag?sin:cos) будет по видимому адрес вызваемой функции, которой передатся параметр (х).

3. Меняем индекс и массив местами
Имеем:
int a[10], i;

Обращения a[i] и i[a] - эквивалентны. Ведь на самом деле - a[i] == *(a + i) == *(i + a) == i[a]. От перемены мест слагаемых сумма не изменяется!

4. Может ли функция находится слева от оператора присваивания?

К примеру?
f() = 5;

Да запросто. Нужно только, что бы функция возвращала ссылку на переменную соответствующего типа.

int x;

int &f()
{
return x;//Возврат ссылки на х.
}

main()
{
f() = 5;
cout << x;
return 0;
}