Size: a a a

2021 March 23

JJ

Joshua Jakowlew in pro.cxx
Как, например, в тех же иостримах операторы сдвига как бы "толкают" данные и показывают их направление
источник

OK

Oleg Kizilov in pro.cxx
Joshua Jakowlew
Как, например, в тех же иостримах операторы сдвига как бы "толкают" данные и показывают их направление
Вот с картинкой как-то мутновато выходит.
источник

PZ

Pavel Zhigulin in pro.cxx
Joshua Jakowlew
Уважаемые, как думаете, стоит ли городить что-то вроде DSL в плюсах? Допустим, у меня и так есть что-то похожее, например, такой код
c++
int main()
{
   Charmap chr{
       "Courier New.ttf", 14, " .:-=+*#%@", {{0, 0, 0}, {255, 255, 255}}
   };
   Image chrm{chr.render()};
   show(chrm.get());
   chrm.write("chr.png");

   Image img{"test.png"};
   auto art = std::move(img.get()) |= ScaleFilter{0.5f, 0.5f}
                                   |  GrayscaleFilter{}
                                   |  MonochromeArtFilter{chr};
   
   art.convertTo(art, CV_8U, 255); // Shit
   img.assign(std::move(art));
   
   show(img.get());
   img.write("result.png");
}


стоит ли его превращать во что-то типа

c++
int main()
{
   Charmap chr{
       "Courier New.ttf", 14, " .:-=+*#%@", {{0, 0, 0}, {255, 255, 255}}
   };
   Image chrm{chr.render()};
   show(chrm()));
   chrm >> "chr.png";

   Image img{"test.png"};
   auto art = std::move(img()) |= ScaleFilter{0.5f, 0.5f}
                               |  GrayscaleFilter{}
                               |  MonochromeArtFilter{chr};
   
   art.convertTo(art, CV_8U, 255); // Shit
   std::move(art) >> img;
   
   show(img());
   img >> "result.png";
}

или я извращенец и творю полнейшую фигню?
Зависит от того, кто этот код будет видеть. Если кто-то кроме тебя - не делай так. Потому что это крайне усложняет чтение, а пока что профита я не вижу особого)
источник

JJ

Joshua Jakowlew in pro.cxx
Хочеца декларативный функциональный стиль в плюсах
источник

JJ

Joshua Jakowlew in pro.cxx
А насколько дсл приняты в мире плюсов не знаю
источник

PZ

Pavel Zhigulin in pro.cxx
Joshua Jakowlew
Хочеца декларативный функциональный стиль в плюсах
Пиши программу на шаблонах)
источник

JJ

Joshua Jakowlew in pro.cxx
Ой, у меня статический полиморфизм на концептах :)
источник

PZ

Pavel Zhigulin in pro.cxx
Joshua Jakowlew
А насколько дсл приняты в мире плюсов не знаю
Я бы проклял увидев такие конструкции :) Плюсы блин и без того не простые, так еще и в чужом огороде разбираться. Но тем не менее тот же boost spirit по сути является DSL, так что есть упоротые люди, кто такое любит :)
источник

CD

Constantine Drozdov in pro.cxx
Joshua Jakowlew
Уважаемые, как думаете, стоит ли городить что-то вроде DSL в плюсах? Допустим, у меня и так есть что-то похожее, например, такой код
c++
int main()
{
   Charmap chr{
       "Courier New.ttf", 14, " .:-=+*#%@", {{0, 0, 0}, {255, 255, 255}}
   };
   Image chrm{chr.render()};
   show(chrm.get());
   chrm.write("chr.png");

   Image img{"test.png"};
   auto art = std::move(img.get()) |= ScaleFilter{0.5f, 0.5f}
                                   |  GrayscaleFilter{}
                                   |  MonochromeArtFilter{chr};
   
   art.convertTo(art, CV_8U, 255); // Shit
   img.assign(std::move(art));
   
   show(img.get());
   img.write("result.png");
}


стоит ли его превращать во что-то типа

c++
int main()
{
   Charmap chr{
       "Courier New.ttf", 14, " .:-=+*#%@", {{0, 0, 0}, {255, 255, 255}}
   };
   Image chrm{chr.render()};
   show(chrm()));
   chrm >> "chr.png";

   Image img{"test.png"};
   auto art = std::move(img()) |= ScaleFilter{0.5f, 0.5f}
                               |  GrayscaleFilter{}
                               |  MonochromeArtFilter{chr};
   
   art.convertTo(art, CV_8U, 255); // Shit
   std::move(art) >> img;
   
   show(img());
   img >> "result.png";
}

или я извращенец и творю полнейшую фигню?
std::move(art) >> img;

выглядит как попытка написать
img = std::move(art);

только извращенским способом
источник

AP

Antony Polukhin in pro.cxx
Joshua Jakowlew
Как, например, в тех же иостримах операторы сдвига как бы "толкают" данные и показывают их направление
Это немного антипаттерн. Операторы должны делать то, что они обычно делают, для всего остального есть функции
источник

JJ

Joshua Jakowlew in pro.cxx
Понял-принял, спасибо. В плюсах такое не любят, значит, нет смысла упарываться в какую-то надуманную семантику, спасибо
источник

CD

Constantine Drozdov in pro.cxx
Joshua Jakowlew
Как, например, в тех же иостримах операторы сдвига как бы "толкают" данные и показывают их направление
только там должно быть
oimagestream{filename} << img;
источник

AK

Anton Kashcheev in pro.cxx
Joshua Jakowlew
Уважаемые, как думаете, стоит ли городить что-то вроде DSL в плюсах? Допустим, у меня и так есть что-то похожее, например, такой код
c++
int main()
{
   Charmap chr{
       "Courier New.ttf", 14, " .:-=+*#%@", {{0, 0, 0}, {255, 255, 255}}
   };
   Image chrm{chr.render()};
   show(chrm.get());
   chrm.write("chr.png");

   Image img{"test.png"};
   auto art = std::move(img.get()) |= ScaleFilter{0.5f, 0.5f}
                                   |  GrayscaleFilter{}
                                   |  MonochromeArtFilter{chr};
   
   art.convertTo(art, CV_8U, 255); // Shit
   img.assign(std::move(art));
   
   show(img.get());
   img.write("result.png");
}


стоит ли его превращать во что-то типа

c++
int main()
{
   Charmap chr{
       "Courier New.ttf", 14, " .:-=+*#%@", {{0, 0, 0}, {255, 255, 255}}
   };
   Image chrm{chr.render()};
   show(chrm()));
   chrm >> "chr.png";

   Image img{"test.png"};
   auto art = std::move(img()) |= ScaleFilter{0.5f, 0.5f}
                               |  GrayscaleFilter{}
                               |  MonochromeArtFilter{chr};
   
   art.convertTo(art, CV_8U, 255); // Shit
   std::move(art) >> img;
   
   show(img());
   img >> "result.png";
}

или я извращенец и творю полнейшую фигню?
В ranges есть нечто подобное.
При огромном количестве такого перегрузки операторов скорее превращаются в визуальный шум и становятся менее читабельными. Лучше от такого воздержаться.
источник

AK

Anton Kashcheev in pro.cxx
Joshua Jakowlew
Как, например, в тех же иостримах операторы сдвига как бы "толкают" данные и показывают их направление
Там это как-то исторически сложилось)
источник

AP

Antony Polukhin in pro.cxx
Joshua Jakowlew
Понял-принял, спасибо. В плюсах такое не любят, значит, нет смысла упарываться в какую-то надуманную семантику, спасибо
Любят https://github.com/apolukhin/Boost-Cookbook/blob/912e36f38b9b1da93b03ae7afd19fcec0900aa83/Chapter03/07_spirit/main.cpp#L58-L61 :(

Но как правило это делается только если есть очень веский мотив
источник

CD

Constantine Drozdov in pro.cxx
кто придумал этот стиль индентации?
        u4_ [ ref(res.year) = _1 ] 
       >> char_('-')
       >> u2_ [ ref(res.month) = _1 ]
       >> u2_ [ ref(res.day) = _1 ]
       >> char_('-')

так же намного понятнее
источник

AP

Antony Polukhin in pro.cxx
Constantine Drozdov
кто придумал этот стиль индентации?
        u4_ [ ref(res.year) = _1 ] 
       >> char_('-')
       >> u2_ [ ref(res.month) = _1 ]
       >> u2_ [ ref(res.day) = _1 ]
       >> char_('-')

так же намного понятнее
я :(
источник

CD

Constantine Drozdov in pro.cxx
вряд ли, вроде это одна из дефолтных возможностей, она просто странная
источник

JJ

Joshua Jakowlew in pro.cxx
Понял, спасибо. А как вообще в плюсах относятся к ФП в целом? Под ФП подразумеваю не лямбды и функции высшего порядка, а декларативность, композиции всего со всем, чистоту, вынесение побочных эффектов и так далее
источник

A

Andrew in pro.cxx
На плюсах пишут разные люди, и пишут по разному. Я стараюсь побольше выставлять const, выделять чистые функции и пр. Какие-то писатели на C-with-classes любят голыми указателями кидаться. Геймдеверы любят свои STL-ы писать. Язык слишком широко распространенный, а вопросы слишком общие. А вообще "хорошо делать хорошо, а плохо — плохо".
источник