🐙 Antony
тут месяц назад были разговоры по поводу того, как объект разложить на отдельные биты без копирований и динамических аллокаций.
Вот на этут тему интересное предложение: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0237r7.pdf
Можно будет писать:
T some_standard_layout_variable;
T* p = std::addressof(some_standard_layout_variable);
std::for_each(bit_iterator(p), bit_iterator(p + 1), [](bit_reference<T>& b) {
b.flip();
})
Stanislav
Stanislav
как грамотно сделать класс с юнионом (юнион С++11, где сложные типы могут быть)
Stanislav
чтобы мувался там и прочее
Крылатый
Почему оно не может тип вывести?
int main() {
for(auto&& _ : {[]{return 72;},[]{return 101;}})
_();
}
Крылатый
Если в 1 элемент делать — всё ок.
Berkus
rog.cc:5:50: error: unable to deduce 'std::initializer_list<auto>&&' from '{<lambda closure object>main()::<lambda()>{}, <lambda closure object>main()::<lambda()>{}, <lambda closure object>main()::<lambda()>{}, <lambda closure object>main()::<lambda()>{}, <lambda closure object>main()::<lambda()>{}, <lambda closure object>main()::<lambda()>{}}'
for(auto&& _ : {[]{},[]{},[]{},[]{},[]{},[]{}})
^
prog.cc:5:50: note: deduced conflicting types for parameter 'auto' ('main()::<lambda()>' and 'main()::<lambda()>')
Berkus
the wat
Крылатый
У меня предположение, что все лямбды для него разного типа?
Berkus
int main() {
for(auto&& _ : {[]{},[]{}})
_();
}
вот даже так
Александр
о, это когда меня чуть не съели
Berkus
ну похоже на то
Крылатый
Парадоксально как-то.
Крылатый
Учитывая, что на вид тип у них одинаковый.
Крылатый
А, бле.
Крылатый
Точно!
Крылатый
Лямбды же в плюсах это структурки в кишках... Им всем разные имена — читай типы — даются.
Berkus
чрезвычайно печально, т.к в данном случае хватило бы одного типа
Berkus
но понятно что в разными return values все равно будут разные типы :\
Anatoly
ну, посчитали, что все что обладает общностью фигачте к std::function
Berkus
нужен initializer_list<compatible_lamda_sigs>
Berkus
Berkus
а каждую лямбду кастить к function defeats the purpose
Anatoly
по поводу уникальности типа
8.1.5.1 Closure types [expr.prim.lambda.closure]
1 The type of a lambda-expression (which is also the type of the closure object) is a unique, unnamed non-union
class type, called the closure type, whose properties are described below.
Крылатый
Тут в соседнем жабберочате подкинули идею годную https://wandbox.org/permlink/6JOBavrdz7mZD45W
Крылатый
@berkus ↑
Dmitry
Anatoly
был напуган
Dmitry
зачем плюсы накрепляются?
Dmitry
к каждой лямбде
🦥Alex Fails
Anatoly
Dmitry
интересно, это полнолстью констекспровый список инициализации или нет
Anatoly
вот если рассматривать +[]{return 1;}
Dmitry
🦥Alex Fails
Anatoly
в данном случае используется вот это
6 The closure type for a non-generic lambda-expression with no lambda-capture has a conversion function to
pointer to function with C++ language linkage (10.5) having the same parameter and return types as the
closure type’s function call operator.
Anatoly
+ применяется к указателю int (*)()
Anatoly
в данном случае определенный
Anatoly
decltype(+[]{return 1;}) == decltype(int(*)())
Dmitry
Anatoly
если без + уникальный тип лямбды
Dmitry
короче без плюсиков плюсики не могут
Anatoly
почему всегда?
Anatoly
у VS2015 +[]{return 1;} не переваривает
Александр
хреновый VS2015
Anatoly
я передам :)
Berkus
Berkus
Berkus
Berkus
это не по стандарту
Anatoly
int(*l[])() = { ([]() {return 0; }) , []() {return 1; } };
Anatoly
вот это студия кушает
Berkus
Berkus
Anatoly
srsly?
век воли не видать
Berkus
окай
Dmitry
попытался нащупать с какой версии работает — оказывается очень давно. gcc-4.6.4 c++0x
Berkus
век воли не видать
prog.cc:4:28: error: lambda-expression in unevaluated context
std::cout « decltype(+[]{return 1;}) == decltype(int(*)()) « std::endl;
Anatoly
попробуй
auto a = +[]() {return 0; };
decltype(a)
Anatoly
вообще говоря, увидев +[]{return 1;} я прифигел
Anatoly
остается вопрос: унарный + можно применять к указателю на функцию?
если по стандарту, то может
7 The operand of the unary + operator shall have arithmetic, unscoped enumeration, or pointer type and the
result is the value of the argument. Integral promotion is performed on integral or enumeration operands.
The type of the result is the type of the promoted operand
Anatoly
тогда это не extention gcc/clang
Berkus
если пойнтер - то не экстеншен, но выше ты постил что там conversion operator
Berkus
это получается implicit conversion to pointer триггерится плюсиком
Berkus
тогда встает вопрос к гражданину Дроздову почему студия это не жрёт
Andrii
ребят, кто-то пробовал в мобильную разработку на плюсах? интересует как android, так и ios (возможно, кроссплатформ). знаю, что есть в qt, но хз, как там под ios будет) еще знаю, что теперь visual c++ вполне подходит для разработки кроссплатформенных мобильных приложений, к тому же vs17 так же предоставляет инструменты виртуализации (физический айфон не нужен, получается), по этому вроде как этот вариант ярче кажется, чем qt. что вы думаете по этому поводу? кто-то уже пробовал? поделитесь опытом плес)
Anatoly
что-то мне подсказывает, что С++ на базе Android NDK оправдывает себя только на очень низком уровне и то если ты получил просадку в производительности, используя рекомендованный Google-ом Android SDK.
Anatoly
если ты хочешь игру замутить, то смотри на Unity, если хочешь что-то социалки смотри в сторону Ionic на базе Cordova или ReactJS. В противном случае, получить конфетку на С++ потребует несоизмеримых затрат по сравнению с другими инструментами
Matway
ребят, кто-то пробовал в мобильную разработку на плюсах? интересует как android, так и ios (возможно, кроссплатформ). знаю, что есть в qt, но хз, как там под ios будет) еще знаю, что теперь visual c++ вполне подходит для разработки кроссплатформенных мобильных приложений, к тому же vs17 так же предоставляет инструменты виртуализации (физический айфон не нужен, получается), по этому вроде как этот вариант ярче кажется, чем qt. что вы думаете по этому поводу? кто-то уже пробовал? поделитесь опытом плес)
Мы пробовали. У нас написан движок, который позволяет один и тот же C++ код запускать под asm.js/Android/Linux/NaCL/OSX/Windows. Стоило это три-четыре месяца работы. Переписывать приходится всё (например, нельзя использовать NativeActivity на Андроиде - он не на всех девайсах нормально работает, поэтому его надо было переписывать). Плюс добавлять freetype/libogg/OpenSL ES и т.д. код. В общем, это очень дорого.
Berkus
ребят, кто-то пробовал в мобильную разработку на плюсах? интересует как android, так и ios (возможно, кроссплатформ). знаю, что есть в qt, но хз, как там под ios будет) еще знаю, что теперь visual c++ вполне подходит для разработки кроссплатформенных мобильных приложений, к тому же vs17 так же предоставляет инструменты виртуализации (физический айфон не нужен, получается), по этому вроде как этот вариант ярче кажется, чем qt. что вы думаете по этому поводу? кто-то уже пробовал? поделитесь опытом плес)
ну я пишу c++ lib + JNI + Java classes
Berkus
буст собираю под андроид, 1.63 и выше работает хорошо