-
+149
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
#include <iostream>
struct empty_struct{};
template<char S, typename N>
struct char_type
{
static const char value = S;
typedef N next;
};
typedef
char_type<'h',
char_type<'e',
char_type<'l',
char_type<'l',
char_type<'o',
char_type<' ',
char_type<'w',
char_type<'o',
char_type<'r',
char_type<'l',
char_type<'d',
char_type<'!',
char_type<'\n', empty_struct> > > > > > > > > > > > > data_type;
template<typename T>
void print()
{
std::cout << T::value;
print<T::next>();
}
template<>
void print<empty_struct>()
{
}
int main(int argc, char* argv[])
{
print<data_type>();
return 0;
}
Такой простой hello world!
AxisPod,
03 Октября 2011
-
+164
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
// DIE, you, nasty context!
while(GetLastError()!=0)
{
//You will soon become NON-BUSY!
SetLastError(0);
wglDeleteContext(glcontext);
std::cout<<GetLastError()<<"\n";
}
Trying to delete my busy OpenGL context from other thread ;]
petersvp,
03 Октября 2011
-
+170
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
#include <stdio.h>
#include <math.h>
#include <conio.h>
int main()
{ //ввод исходных данных
short int i, j, k, l;
printf("i="); scanf("%d",&i);
printf("j="); scanf("%d",&j);
printf("k="); scanf("%d",&k);
printf("l="); scanf("%d",&l);
if ((k==i+2) && (l==j+1)); else
if ((k==i+2) && (l==j-1)); else
if ((k==i-2) && (l==j+1)); else
if ((k==i-2) && (i==j-1)); else
if ((k==j+2) && (l==i+1)); else
if ((k==j+2) && (l==i-1)); else
if ((k==j-2) && (l==i+1)); else
if ((k==j-2) && (l==i-1))
printf("k= %d", k);
printf("l= %d", l);
//конь встал на нужную точку
getch();
}
http://otvet.mail.ru/question/64546141/
vkontakte,
02 Октября 2011
-
+155
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
#include <iostream>
#include <memory>
#include <assert.h>
using namespace std;
template <class T>
class megaClass
{
public:
void hello()
{
assert(dynamic_cast<T*>(this)!=NULL);
static_cast<T*>(this)->hello();
}
virtual ~megaClass() {}
};
class cleft : public megaClass<cleft>
{
public:
void hello()
{
std::cout << "left::hello()" << std::endl;
}
};
class cright : public megaClass<cright>
{
public:
void hello()
{
std::cout << "right::hello()" << std::endl;
}
};
int main()
{
scoped_ptr<megaClass<cleft> > a1=new cleft;
a1->hello();
scoped_ptr<megaClass<cright> > a2=new cright;
a2->hello();
return 0;
}
Пытался продемонстрировать статический полиморфизм TarasB и получилась такая какашка. Кто действительно крут и может сабдж продемонстрировать? Я где-то видел пример, но не помню где...
Ещё продемонстрировал статический полиморфизм через стратегии:
struct Strategy1
{
static void do(){printf("Lol1");}
};
struct Strategy2
{
static void do(){printf("Lol2");}
};
template<class Strategy>
class MegaClass
{public:
void do()
{
printf("Mega");
Strategy::do();//Класс Strategy можно было и создать для хранения состояния.
printf("/n\");
}
};
//...
Дальше в разных частях кода создаем:
MegaClass<Strategy1> o;
o.do();
//...
MegaClass<Strategy2> o;
o.do();
"Один" класс ведёт себя по разному. Понятно, что это не совсем полиморфизм. Но очень часто именно в таком контексте используют динамический полиморфизм, хотя такого статического здесь достаточно выше крыши.
Плюсы этого подхода :
1)Создаётся объект в стеке, значит быстро, а не в куче. Хотя можно и не в стеке.
2)Используется шаблон, значит компиль будет инлайнить.
Минус:
1)Если понадобится резкой перейти от статического полиморфизма к динамическому - придётся переписывать на виртуальные функции или на истинный статический полиморфизм.
Обсуждения здесь:
http://govnokod.ru/8025#comment110773
Сразу исключим детсадовский вариант статического функционального полиморфизма c перегрузкой функций:Class1 o1;
foo(o1);
Class2 o2;
foo(o2);
void foo(Class1 o){/*...*/};
void foo(Class2 o){/*...*/};
Кто-нибудь реально умеет can into нормальный статический полиморфизм?
CPPGovno,
30 Сентября 2011
-
+169
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
if(this->connectionState)
{
db_Model->clear();
db_Model->setTable("lh_chat_archive");
db_Model->setRelation(6, QSqlRelation("lh_profiles", "id", "last_name"));
db_Model->setEditStrategy(QSqlRelationalTableModel::OnManualSubmit);
db_Model->removeColumn(0);
db_Model->removeColumn(0);
db_Model->removeColumn(0);
db_Model->removeColumn(0);
db_Model->removeColumn(0);
db_Model->removeColumn(2);
db_Model->removeColumn(2);
db_Model->removeColumn(2);
db_Model->removeColumn(3);
db_Model->removeColumn(3);
db_Model->removeColumn(3);
db_Model->removeColumn(3);
db_Model->removeColumn(3);
db_Model->removeColumn(3);
db_Model->removeColumn(3);
db_Model->removeColumn(3);
db_Model->removeColumn(3);
db_Model->removeColumn(3);
db_Model->removeColumn(3);
db_Model->select();
db_Model->setHeaderData(0, Qt::Horizontal, trUtf8("Клиент"));
db_Model->setHeaderData(1, Qt::Horizontal, trUtf8("Менеджер"));
mapper->setModel(db_Model);
mapper->setItemDelegate(new QSqlRelationalDelegate(this));
}
Сотрудник фирмы таким образом избавился от ненужных столбцов в выборке. На вопрос: "А как быть если столбцов много?", ответа не последовало...
inbush,
30 Сентября 2011
-
+150
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
Люди, помогите решить такой вопрос. Приведу пример:
Есть программист Петя. Он прочитал очень много книг по программированию,
и вообще умный парень :). И, так как, Петя прочитал много умных книг (Александреску к примеру),
он соответственно пишет умный код, используя различные фишки с++, например,
очень любит шаблоны (такие вещи типа статического полиморфизма и еще много
всего связанного с шаблонами и обобщенным программированием) или использует
сложные тернарные операторы… ну и т.д. … Соответственно код работает и все хорошо.
Как-то в разговоре с Петей ему сказали, что если так прогать, то может получиться
непрозрачный код.
На что он ответил: «Если алгоритм написан верно, и Каму-то непонятен код, то
проблема в том что человек просто плохо образован в плане программирования.
Ибо кто-то, например, не знает что такое классы и ему будет не прозрачен код,
в котором используют классы или обычное наследование. И соответственно не
писать же все процедурно, из-за того, что кто-то не знает что такое классы.
А само понятие прозрачности кода - ерунда ».
От сюда вопрос, Прав ли Петя и что такое вообще «Прозрачность кода»?
Или действительно код не может быть написан «Заумно», а тот, кто так
считает, просто плохо знает стандарт языка.
Вопрос совершенно серьёзный. //Не холивар.
CPPGovno,
29 Сентября 2011
-
+167
- 1
- 2
for(byte i = 3;i<129;++i)
(state.programImpl[i])(state);
Мне достался на поддержку этот проект. Это основной цикл программы, хотя их несколько. Есть некоторый массив, заполненный алгоритмом программыфункциями через
PI programImpl= {
beginPrg,
//...
};
В зависимости от выполнения различных условий state.programImpl самомодифицируется во время выполнения этого цикла. Мне хочется сказать: "Возьми Lisp и никогда более не берись за С++!". А вообще, в этом проекте эта самомодификация просто не нужна. А теперь вопрос: "Что у человека с головой?"
Говногость,
29 Сентября 2011
-
+178
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
static long get_ver(unsigned short *src, unsigned char *dst)
{
u8 tmp_buf[16];
s32 i = 0;
while(1)
{
if(dst[i] < '0' || dst[i] > '9')
break;
tmp_buf[i] = dst[i] % 0x30;
i++;
}
if(i == 1)
*src = tmp_buf[0];
else if(i == 2)
*src = (tmp_buf[0] * 10) + tmp_buf[1];
else if(i == 3)
*src = (tmp_buf[0] * 100) + (tmp_buf[1] * 10) + tmp_buf[2];
else if(i == 4)
*src = (tmp_buf[0] * 1000) + (tmp_buf[1] * 100) + (tmp_buf[2] * 10) + tmp_buf[3];
return i;
}
Функция читает из dst и пишет в src O_O
mors,
28 Сентября 2011
-
+163
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
void __fastcall TManageForm::bAnyCentralizerClick(TObject *Sender)
{
TBitBtn *Item = dynamic_cast<TBitBtn *>(Sender);
int bit=0; // по умолчанию - схват продольной, выход 0 платы 1
if ( Item->Name == bThicknessCentralizer->Name)
bit=6; // если схват толщины - выход 6 платы 1
if (Item->Caption==centr_open)
bit++; // "разжать" - всегда следующий выход после сжать
a1->SetOutBit(bit);
}
Выставление дискретного выхода по дебильному алгоритму. Хотел как лучше, а получилось как всегда)))
phys-tech,
28 Сентября 2011
-
+151
- 1
- 2
- 3
- 4
- 5
- 6
void f_ai(intrusive_ptr<serial> i);
//...
static serial ai;
serial* ii=&ai;
//...
f_ai(ii);
Компилируется, а потом грохается. С++ такой Си...
CKrestKrestGovno,
25 Сентября 2011