- 1
- 2
std::tuple<int, int, int, bool> cock;
std::get<bool>(cock)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
std::tuple<int, int, int, bool> cock;
std::get<bool>(cock)
Сначала не понимал нахуй нужен геттер по типу, но при очередном добавлении нового int и забытии поменять индекс у була, заюзал его.
Бтв, почему нету cock.get<0>?
−1
#include <boost/hana.hpp>
#include <boost/hana/ext/std/tuple.hpp>
#include <cstdint>
namespace hana = boost::hana;
using namespace hana::literals;
using hana::transform, hana::decltype_, hana::to_set, hana::type_c;
auto copy = [](uint8_t * in, uint8_t * out, auto n, auto s) {
n.times.with_index([&](auto x) {
if constexpr(x == s) {
++in;
} else {
*(uint16_t *)out = *(uint16_t *)in;
out +=2; in += 2;
}
});
return in;
};
auto f(uint8_t * in, uint8_t * out) {
return copy(in, out, 33_c, 15_c);
}
https://habr.com/ru/post/482834/#comment_21094618
> Простая задача, самый базовый вариант https://godbolt.org/z/5F5mt9 — повторите.
Очередные набросы крестоговна на хабр от царя.
Найдите UB.
0
class Display
{
public:
//pin 10_CS_LOAD pin 11_DIN pin 13_CLK
const int CS = 10;//CS на 10 пине
void R1_R2 (char x,char y)//метод вывода чисел 0-99 в разряды 1,2 c гашением нуля
{
char k1,k2;
if(x<10)
{
if(y==1) //если включена точка
{ SPI_out(2, arr_seg[x]+128);} //вывести число во второй разряд с точкой
else//выключена точка
{ SPI_out(2, arr_seg[x]);} //вывести число во второй разряд без точки
SPI_out(1, 0 );//в первый записать все нули ,и погасить его
return; //завершить метод
}
else
{
k1=0;
k2=x; while (k2>=10) {k1++; k2=k2-10;}
SPI_out(1,arr_seg[k1]); //вывести число в первый разряд
if(y==1) //если включена точка
{SPI_out(2,arr_seg[k2]+128);} //вывести число во второй разряд c точкой
else{SPI_out(2,arr_seg[k2]);} //без точки
}
}
void R2_R3 (char x)//метод вывода чисел 0-99 в разряды 2,3 (темепература)
{
char k1,k2;
if(x<10)
{
SPI_out(2,0); //пробел во второй разряд
SPI_out(3,arr_seg[x]); //вывести число в третьий разряд
}
else {
k1=0;
k2=x; while (k2>=10) {k1++; k2=k2-10;}
SPI_out(2,arr_seg[k1]); //вывести число во второй разряд без точки
SPI_out(3,arr_seg[k2]); //вывести число в третьий разряд
}
}
void R3_R4 (char x,char y)//метод вывода чисел 0-99 в разряды 3,4
{
char k1,k2;
k1=0;
k2=x; while (k2>=10) {k1++; k2=k2-10;}
if(y==1) //если включена точка
{ SPI_out(3,arr_seg[k1]);} //вывести число в третьий разряд без точки
else
{SPI_out(3,arr_seg[k1]+128); }//вывести число в третьий разряд с точкой
SPI_out(4,arr_seg[k2]); //вывести число в четвертый разряд
}
void R1 (unsigned char x,boolean p) //метод для отрисовки в первом разряде
{
if(p==true) //если активированна точка
{ SPI_out(1, arr_seg[x]+128 );} //вывести в первый разряд число по № из массива
else {SPI_out(1, arr_seg[x]);}
}
void R2 (unsigned char x,boolean p) //метод для отрисовки во втором разряде
{
if(p==true) //если активированна точка
{ SPI_out(2, arr_seg[x]+128 );} //вывести в первый разряд число по № из массива
else {SPI_out(2, arr_seg[x]);}
}
void R3 (unsigned char x,boolean p) //метод для отрисовки в третьем разряде
{
if(p==true) //если активированна точка
{ SPI_out(3, arr_seg[x]+128 );} //вывести в первый разряд число по № из массива
else {SPI_out(3, arr_seg[x]);}
}
void R4 (unsigned char x,boolean p) //метод для отрисовки в четвертом разряде
{
if(p==true) //если активированна точка
{ SPI_out(4, arr_seg[x]+128 );} //вывести в первый разряд число по № из массива
else {SPI_out(4, arr_seg[x]);}
}
//метод отрисовки во всех разрядах сразу
void allraz (unsigned char a,unsigned char b,unsigned char c,unsigned char d)
{
SPI_out(1, arr_seg[a]);
SPI_out(2, arr_seg[b]);
SPI_out(3, arr_seg[c]);
}
автору 40 лет, на секундочку
0
#include "Budilnic.h" //описание библиотеки Будильник
#define Bud_out 4 //на пин d4 выводится 1 если сработал любой будильник
#define Vibro_gen 9 //на пин d9 выводятся импульсы для подключения вибромотора
#define Buz 5 //на пин d5 подключена Пищалка с генератором
#define Stop_button 8 //на пин d8 подключена кнопка,подтянута на +5
Budilnic:: Budilnic()
{ //описываем пустой конструктор, он всегда вызывается при создании экземпляра класса
}
void Budilnic:: initialReading () //говорим что эта функция пренадлежит классу Budilnic
{ //при включении из EEPROM зачитываются сохраненные значения
SuH=Eprom_read(20,0); SuM=Eprom_read(21,0); SuF=Eprom_read(22,0);
MoH=Eprom_read(23,0); MoM=Eprom_read(24,0); MoF=Eprom_read(25,0);
TuH=Eprom_read(26,0); TuM=Eprom_read(27,0); TuF=Eprom_read(28,0);
WeH=Eprom_read(29,0); WeM=Eprom_read(30,0); WeF=Eprom_read(31,0);
ThH=Eprom_read(32,0); ThM=Eprom_read(33,0); ThF=Eprom_read(34,0);
FrH=Eprom_read(35,0); FrM=Eprom_read(36,0); FrF=Eprom_read(37,0);
SaH=Eprom_read(38,0); SaM=Eprom_read(39,0); SaF=Eprom_read(40,0);
//зачитываем пользовательскую настройку SetAlarmTimer
budilnic.SetAlarmTimer = EEPROM_uint_read(41,10); //читаем из EEPROM 2 бита адр.41 и адр.42. Начальная установка 10
pinMode(Bud_out, OUTPUT);//Сигнальный пин будильника на выход
pinMode(Stop_button, INPUT);//Кнопка Stop работает на вход
pinMode(Buz, OUTPUT); //Пишалка на выход
pinMode(Vibro_gen, OUTPUT); //Пин вибромотора на выход
}
void Budilnic:: check_Data () // передаем значения на проверку
{
check_Parametrs(SuF,SuH,SuM,0); //проверить флаг,часы,минуты Восскресенье
check_Parametrs(MoF,MoH,MoM,1); //проверить флаг,часы,минуты Понедельник
check_Parametrs(TuF,TuH,TuM,2); //проверить флаг,часы,минуты Вторник
check_Parametrs(WeF,WeH,WeM,3); //проверить флаг,часы,минуты Среда
check_Parametrs(ThF,ThH,ThM,4); //проверить флаг,часы,минуты Четверг
check_Parametrs(FrF,FrH,FrM,5); //проверить флаг,часы,минуты Пятница
check_Parametrs(SaF,SaH,SaM,6); //проверить флаг,часы,минуты Суббота
}
void Budilnic:: check_Parametrs (unsigned char F,unsigned char H,unsigned char M,unsigned char DAY)
{
if(F==1)
{ //если будильник включен
if(DAY==time.weekday)
{ //если совпал день недели
if(H==time.hours)
{ //если часы совпали
if(M==time.minutes)
{ //если минуты совпали
if(time.seconds==0)
{//если секунды по нулям
AlarmTimer=0; //обнуляем таймер
AlarmFlag=1; //поднимаем флаг, есть срабатывание
}}}}}
}//конец функции проверки будильников
void Budilnic :: LetsGo()
{//функция постоянно вызывается из майна
if(AlarmFlag==1)
{ //если зарегистрированно срабатывание
digitalWrite(Bud_out, HIGH); // зажигаем светодиод
Misic=1; //включаем воспроизведение мелодии
if( (AlarmTimer/2)==SetAlarmTimer ) //если таймер досчитал до заданного времени
{ //выключаем будильник
digitalWrite(Bud_out, LOW); // гасим светодиод
Misic=0; //отключить музыку
AlarmFlag=0; // и опускаем флаг
}
if(digitalRead(Stop_button)==LOW) //если нажата кнопка STOP
{
digitalWrite(Bud_out, LOW); // гасим светодиод
Misic=0; //отключить музыку
AlarmFlag=0; // и опускаем флаг
} //конец проверки кнопки STOP
}//конец проверки флага срабатывания
if(Misic)
{
//------------управляем импульсами на d9------------------------------
if(VibroTimer<10) digitalWrite(Vibro_gen, LOW); // Снять импульс d9
else digitalWrite(Vibro_gen, HIGH); //Подать импульс на d9
//-------------------сдесь проиррываем мелодию------------------------
if((BuzTimer>=0) & (BuzTimer<2)) Buzer=1; // пик 0.1
if((BuzTimer>=2) & (BuzTimer<4)) Buzer=0; // пауза 2.3
if((BuzTimer>=4) & (BuzTimer<6)) Buzer=1; // пик
if((BuzTimer>=6) & (BuzTimer<8)) Buzer=0; // пауза
if((BuzTimer>=8) & (BuzTimer<10)) Buzer=1; // пик
if((BuzTimer>=10) & (BuzTimer<20)) Buzer=0; // пауза
//--------второй куплет
это пиздец, товарищи
+4
int main()
{
using ToString::ExprToString;
using Result1 = Eval<Expr<Add,
Expr<Div, Int<5>, Int<3>>,
Expr<Div, Int<6>, Int<8>>>>;
std::cout << ExprToString<Result1>::toString() << std::endl; // 5/3 + 6/8 = (29 / 12)
using Result2 = Eval<Expr<Div, Int<100>, Int<20>>>;
std::cout << ExprToString<Result2>::toString() << std::endl; // 5
using Result3 = Eval<Expr<Div, Int<27>, Int<24>>>;
std::cout << ExprToString<Result3>::toString() << std::endl; // (9 / 8)
using Result4 = Eval<Expr<Mul,
Expr<Div, Int<5>, Int<3>>,
Expr<Div, Int<6>, Int<8>>>>;
std::cout << ExprToString<Result4>::toString() << std::endl; // 5/3 * 6/8 = (5 / 4)
using Result5 = Eval<Expr<Derivative, Var<0>, Expr<Mul, Var<0>, Var<0>>>>;
std::cout << ExprToString<Result5>::toString() << std::endl; // d/dx x*x = 2*x = (Var(0) * 2)
using Result6 = Eval<Expr<Derivative, Var<0>, Expr<Div, Int<2>, Var<0>>>>;
std::cout << ExprToString<Result6>::toString() << std::endl; // d/dx 2/x = -2 * x^2
return EXIT_SUCCESS;
}
Написал калькулятор с символьными вычислениями на шаблонах. Получился «Лисп».
https://wandbox.org/permlink/vAHC5IpyIIyQhUjJ
+2
Сколько красивых подростков проходит мимо каждый день...
Почему нельзя просто взять - и отсосать, прямо на улице?
Можно? Да ну нахуй!
−1
// https://godbolt.org/z/ZsXDti
#include <boost/hana.hpp>
#include <range/v3/view.hpp>
#include <range/v3/experimental/view/shared.hpp>
#include <iostream>
using namespace ranges::views;
using std::vector, boost::hana::_, ranges::concat_view, ranges::experimental::views::shared;
vector<double> sort(vector<double> vec) {
if(size(vec) <= 1) {
return vec;
} else {
auto pivot = vec[size(vec) / 2];
return concat_view(
sort(vec | filter(_ < pivot)),
vec | filter(_ == pivot),
sort(vec | filter(_ > pivot))
);
}
}
int main() {
std::cerr << (sort({30, 20, 50, 40}) | shared | all) << std::endl;
}
https://habr.com/ru/post/482318/#comment_21072122
Царь набрасывает на хабр какое-то крестобустоговно, называя его красивым.
+2
Widget&& var1 = someWidget; // here, “&&” means rvalue reference
auto&& var2 = var1; // here, “&&” does not mean rvalue reference
template<typename T>
void f(std::vector<T>&& param); // here, “&&” means rvalue reference
template<typename T>
void f(T&& param); // here, “&&”does not mean rvalue reference
В мире нет ничего более сложного, запутанного и неадекватно раздутого, чем семантика ссылок и категорий значений в «C++».
Заглянуть в ад одним глазком: https://en.cppreference.com/w/cpp/language/value_category
Впустить Ад в себя: https://eli.thegreenplace.net/2014/perfect-forwarding-and-universal-references-in-c
Поехать кукухой: https://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers
0
#include <iostream>
#include <functional>
#include <array>
template<typename F, int... I>
std::array<int, sizeof...(I)> materializeImpl(const F & f, std::integer_sequence<int, I...>)
{
return { (f(), I)... };
}
template<size_t N, typename F, typename I = std::make_integer_sequence<int, N>>
auto materialize(const F & f)
{
return materializeImpl(f, I{});
}
template<size_t N, typename F>
void times(const F & f)
{
(void)materialize<N>([&f]() { f(); return 0; });
}
int main()
{
times<22>([]() { std::cout << "Hello There." << std::endl; });
return EXIT_SUCCESS;
}
Наш инженерный отдел ебанулся на отличненько!
https://wandbox.org/permlink/txNcEa2ZkuG2A1Sj
+3
#include <iostream>
using namespace std;
class lock_guard_ext{
public:
lock_guard_ext() { cout << "lock_guard_ext ctor" << endl; }
~lock_guard_ext() { cout << "lock_guard_ext dtor" << endl; }
};
struct Access {
lock_guard_ext lock;
int & ref_to_value;
};
int & t() {
throw 0;
}
Access foo1() {
return { {}, t() };
}
int main () {
try {
volatile auto a = foo1();
} catch (int) {
}
}
В шланге деструктор вызывается, в gcc не вызывается.
https://wandbox.org/permlink/7sbsqzhbo0o7dOse