использование #pragma once - это грех или тяжкий грех?
использование #pragma once - это грех или тяжкий грех?
DOMXPathResult *xpathResult = static_cast<DOMXPathResult*> (
static_cast<DOMXPathEvaluator*>(pXmlDoc)->evaluate(
XMLString::transcode("/HUJ/PIZDACFG/PizdaCfg/@FooBarEnabled"),
pXmlDoc, NULL, DOMXPathResult::NUMBER_TYPE, NULL
)
);
double attrVal = xpathResult->getNumberValue();
int bAttrVal = static_cast<int>(attrVal);
m_fooBarEnabled = (bAttrVal == 1);
return 0;
не пишите на плюсах пацаны
не думал, что вновь скажу это когда-нибудь, но некоторые части буста всё ещё торт. спонсором сегодняшнего торта является boost::multi_index
большинство цпыщьпыщь программистов пишут свои библиотеки так, словно ими будет пользоваться полнейший идиот, который не будет закрывать дескрипторы, вызывать функции в неправильном порядке и подсовывать им аргументы не того типа. в действительности оказывается, что единственным пользователем подобной библиотеки оказывается её же разработчи
Вот в D есть удобная функция format.
А в крестах на выбор три варианта: либо си-портянка, либо sstream-портянка, либо бустопортянка.
Сделал норм:
#include <boost/format.hpp>
#include <string>
std::string format_(boost::format &fmt)
{ return fmt.str(); }
template <typename A, typename ... Args>
std::string format_(boost::format &fmt, const A& a, Args...args)
{ return format_(fmt % a, args...); }
template <typename ... Args>
std::string format(const std::string &fmt, Args...args)
{
boost::format fmt_(fmt);
return format_(fmt_, args...);
}
Usage:
std::string a = format("[%d, '%s', 0x%x]", 1, ":3", 359);
Писать эффективные вычматы на чистом C — содомия, поскольку кроме убогого препроцессора средств метапрограммирования нет.
Альтернатвы:
1) Более лучший препроцессор, например erb
(Ruby). Минус — неудобно возиться с получившимся выхлопом (отладка, балансировка скобочек, етц).
2) Языки, в которых можно явно указать, какие вычисления будут происходить в compile-time. Например, C++ (шаблоны, constexpr).
Хочу попробовать D в качестве второй альтернативы. Есть гнутый компилятор, который [по мнению авторитетных анонимных экспертов] даёт на выхлопе код, не хуже, чем gcc.
Вот есть такая штука:
template<class F>
void foo(F f) {
for(int i = 0; i < 100; i++)
f(i);
}
Наверное, это очевидно, но gcc не инлайнит¹ вызов f
, если f
- это функция. Поэтому приходится писать
template <void f(int)>
void foo() { /* ... */ }
Либо оборачивать f
в какую-нибудь лямбду или класс с оператором ()
.
1) На самом деле инлайнит, если foo()
используется только один раз в коде.
скрутил торрент-клиент и жаббер-клиент в единый комбаен с xmpp интерфейсом: https://bitbucket.org/generatorglukoff/jabload
я пришел к успеху? где моя тян-юрист?
Можно ли дебажить плюсцовый код, не имея о плюсцах ни малейшего представления?
В голограммах, которые крутятся вокруг Ионы, замечено: "using namespace std;", "template<class Type>", а также printf и scanf.
Мантры для счастливой отладки: https://gist.github.com/aras-p/6224951
Как такой код собрать шлангом? http://ideone.com/a34JtE
o01eg@o01eg /tmp $ g++ -std=c++0x test-sfinae.cpp
o01eg@o01eg /tmp $ clang++ -std=c++11 test-sfinae.cpp
test-sfinae.cpp:10:5: error: no member named 'Serialize' in 'std::vector<std::tuple<int, char>, std::allocator<std::tuple<int, char> > >'
t.Serialize(*this);
~ ^
test-sfinae.cpp:73:4: note: in instantiation of function template specialization 'Stream::operator>><std::vector<std::tuple<int, char>,
std::allocator<std::tuple<int, char> > > >' requested here
s >> data;
^
1 error generated.
o01eg@o01eg /tmp $ /usr/bin/c++ -Dptbe_server_EXPORTS -O2 -march=core2 -mtune=core2 -pipe -msse -msse2 -msse3 -mssse3 -mmmx -mcx16 -msahf --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=4096 -std=c++0x -Wc++0x-compat -pedantic -Wall -Wextra -g -fPIC -I/mnt/anythings/myHG/ptbe/include server-game.cpp.i -c
Внутренняя ошибка компилятора: повторный вход в программу диагностики
Отправьте подробное сообщение об ошибке
с препроцессированным исходным кодом.
Смотрите инструкции в http://bugs.gentoo.org/.
o01eg@o01eg /tmp $ /usr/bin/c++ -Dptbe_server_EXPORTS -O2 -march=core2 -mtune=core2 -pipe -msse -msse2 -msse3 -mssse3 -mmmx -mcx16 -msahf --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=4096 -std=c++0x -Wc++0x-compat -pedantic -g -fPIC -I/mnt/anythings/myHG/ptbe/include server-game.cpp.i -c
o01eg@o01eg /tmp $