- 1
class TSettingGrouperator
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+13
class TSettingGrouperator
+20
#include <iostream>
#include <functional>
using namespace std;
template<class TReceiver, class TResult>
struct TMessage
{
virtual const TResult sendTo(const TReceiver&) const = 0;
virtual const TResult sendTo(TReceiver&) const = 0;
virtual ~TMessage(void){}
};
template<class TReceiver, class T, class TResult=void>
struct TTypedMessage : public TMessage<TReceiver, TResult>
{
T _data;
explicit TTypedMessage(const T& data):_data(data)
{}
const TResult sendTo(const TReceiver& functor) const
{
return functor(_data);
}
const TResult sendTo(TReceiver& functor) const
{
return functor(_data);
}
};
class T1
{
typedef T1 TThis;
public:
void operator()(const int& i)const{cout <<"int"<< i<<endl;}
void operator()(const double& i)const{cout <<"double"<< i<<endl;}
void operator()(const std::reference_wrapper<double>& i)const{cout <<"double&"<< i.get()<<endl;}
template<class T>
void operator()(const T& i)const{cout << "UnknowenMesage"<<endl;}
};
class T2
{
typedef T2 TThis;
public:
void operator()(int i)const{cout <<"int"<< i<<endl;}
void operator()(double i)const{cout <<"doble"<< i<<endl;}
void operator()(std::reference_wrapper<double> i)const{cout <<"double&"<< i.get()<<endl;}
};
template<class TMessage, class TReceiver, class TResult=void>
TResult sendMessage(TReceiver& Receiver, TMessage& Message)
{
TTypedMessage<TReceiver, TMessage, TResult> TypedMessage(Message);
return TypedMessage.sendTo(Receiver);
}
template<class TMessage, class TReceiver, class TResult=void>
TResult sendMessage(const TReceiver& Receiver, TMessage& Message)
{
TTypedMessage<TReceiver, TMessage, TResult> TypedMessage(Message);
return TypedMessage.sendTo(Receiver);
}
template<class TMessage, class TReceiver, class TResult=void>
TResult sendMessage(TReceiver& Receiver, const TMessage& Message)
{
TTypedMessage<TReceiver, TMessage, TResult> TypedMessage(Message);
return TypedMessage.sendTo(Receiver);
}
template<class TMessage, class TReceiver, class TResult=void>
TResult sendMessage(const TReceiver& Receiver, const TMessage& Message)
{
TTypedMessage<TReceiver, TMessage, TResult> TypedMessage(Message);
return TypedMessage.sendTo(Receiver);
}
int main() {
T1 a;
T2 b;
sendMessage(a, 10);
sendMessage(a, 10.0);
double d=0;
sendMessage(a, std::ref(d));
sendMessage(b, 10);
sendMessage(b, 10.0);
sendMessage(b, std::ref(d));
sendMessage(a, string("kokoko"));
int aa=6;
sendMessage(a, aa);
return 0;
}
Найдено на просторах Интранета:
http://ideone.com/pMSA1p
В чем смысл? Так получается больше кода?
+18
bool isRightTriangle(int a, int b, int c)
{
int przeciw=a;
if (b>przeciw) przeciw = b;
if (c>przeciw) przeciw = c;
if (przeciw=a)
if (a*a==b*b+c*c) return true;
else if (przeciw=b)
if (b*b==a*a+c*c) return true;
else if (przeciw=c)
if (c*c==a*a+b*b) return true;
return false;
}
+17
#include <iostream>
template< class Val >struct SwithClass
{
SwithClass( const Val & v ):val(v){}
void operator() (){}
template < class E, class F, class ... Args > void operator() ( E e, F f, Args ... args )
{
if( e==val ) f();
else (*this)( args... );
}
private:
Val val;
};
template< class Val > SwithClass<Val> Swith( const Val& v ){ return SwithClass<Val>(v);}
int main()
{
int x = 8;
Swith( x )
(
1, [](){ std::cout <<"x=1" << std::endl; },
8, [](){ std::cout <<"x=8" << std::endl; }
);
return 0;
}
http://ideone.com/Xbj46U
+22
int AzFl_PSD_Image::ReadIntFromPsdFile(const unsigned char *offset)
{
char i[4];
i[0] = offset[3];
i[1] = offset[2];
i[2] = offset[1];
i[3] = offset[0];
int *r = (int*)i;
return r[0];
}
Невиноватый я что програмисты из адоба биты задом на перед в файл пишут :`(
+16
QString QSqlResultPrivate::positionalToNamedBinding()
{
int n = sql.size();
QString result;
result.reserve(n * 5 / 4);
bool inQuote = false;
int count = 0;
for (int i = 0; i < n; ++i) {
QChar ch = sql.at(i);
if (ch == QLatin1Char('?') && !inQuote) {
result += qFieldSerial(count++);
} else {
if (ch == QLatin1Char('\''))
inQuote = !inQuote;
result += ch;
}
}
result.squeeze();
return result;
}
// Пример запроса:
// select * from some where d_t = "2012-11-08 12:00:00"
Словили сегодня вот такой глюк в кутишечке.
База данных отлично понимает строки и даты в двойных кавычках, все это даже работало какое-то время. Но когда попытались исполнить запрос с таймштампом в двойных кавычках (как в строке 25), начала возникать ошибка в духе "непонятные символы в дате". В одинарных же кавычках все работало. После копания в исходниках и гуглёжки выяснилась и причина - QtSql в упор не видит двойных кавычек, и пытается проставить в них именованные параметры (в нашем случае :00, :00)...
Если кому нужен быстрофикс - берем тут: https://bugreports.qt-project.org/browse/QTBUG-27159
+18
#include <iostream>
int main() {
// Инициализируй меня... полностью.
void (*(&(*omg[])())[1]) (void (*)(void (*(*[])())())) = { [] () ->
void (*(&)[1]) (void (*)(void (*(*[])())())) { static void (*f[])
(void (*)(void (*(*[])())())) = { [] (void (*f)(void (*(*[])())())) {
static void (*(*ff[])())() = { [] () -> void (*)() { return [] () {
std::cout << "Test OK" << std::endl; }; } }; f(ff); } }; return f; } };
// Вызывай, вызывай меня... полностью.
omg[0]()[0]([] (void (*(*f[])())()) { f[0]()(); });
return 0;
}
http://ideone.com/gvg1B7
Говнокоду http://govnokod.ru/12066 посвящается.
Инициализация массива указателей на функции, возвращающих ссылку на массив указателей на функции принимающие указатель на функцию, принимающую массив указателей на функции, возвращающих указатель на функцию ничего не принимающую и ничего не возвращающую.
С++ это простой и наглядный язык.
+11
int a[4]={};
void f(void){}
void functionWithArrayParam(int (&a)[4])
{
a[3]=4;
}
void functionWithFunctionParam(void (*f)(void))
{
f();
};
int (&functionReturnArray(void))[4]
{
return a;
}
void (*arrayOfFunction[4])(void)={f,f,f,f};
void (*functionReturnFunction(void))(void)
{
return f;
};
int main() {
functionReturnArray()[3]=4;
functionWithArrayParam(a);
arrayOfFunction[3]();
functionWithFunctionParam(f);
functionReturnFunction()();
Батхертный путь C++
Просветление — состояние полной осознанности (выход за пределы дуального ума)... Это скачкообразное изменение восприятия окружающего мира, знаменующее собой переход к отличной от общепринятой форме мышления. Одновременно является началом открытия чакры «третьего глаза» и трамплином для глубоких изменений сознания. Как витальная форма, тяжело поддается ментальному описанию.
Батхертный путь C++ - путь, которым идут просветленные последователи Дао и Дзен С++, способные писать всё в одном выражении.
Доступность этого пути в C++ усиливает возможности C++ по созданию одного и того же кода самыми разнообразными и очень красивыми способами.
Следуя этому пути можно писать такой крутой код, что все товарищи из команды, работающие над кодом, над которым вы работаете вместе с ними, будут завидовать вам и бить вас за это при каждой встрече с разворота.
Этот принцип батхертного пути C++, лежащий в основе C++, помогает потратить дополнительные 1000% времени на разработку и поддержку C++ программ и получить за это дополнительные деньги. Поэтому C++ крайне выгоден!
Взглянем на малую часть основ этого пути при объявлении массивов и функций в C++:
Док-ва истинности пути к просветлению:
http://ideone.com/FCW4f
Итак, используя эти простые принципы нужно написать массив функций, возвращающих массив функций с параметром функция, принимающая массив функций, возвращающих функцию void (void)? typedef запрещён.
Останется только один! Истинный просветленный носитель разума и света!
Если вы знаете другие основы батхертного пути C++, то искренне прошу поделиться с нами вашими открытыми чакрами.
+11
typedef void Start1(void);
struct Kernel
{
Start1 Start;
} kernel;
void Kernel::Start(void)
{
}
Как всегда оттуда.
+16
void keyStart(int key,void (*func)())
{
while(SDL_PollEvent(&keyEvent))
{
switch(keyEvent.type)
{
case SDL_KEYDOWN:
switch(keyEvent.key.keysym.sym)
{
/*Выход*/
case SDLK_ESCAPE:
func();
break;
case SDLK_w:
func();
break;
case SDLK_q:
func();
break;
default:
break;
}
break;
default:
break;
}
}
}
Функция высшего порядка, мужики. Сами знаете откуда.