← All posts tagged C++

Shchvova
? C++ и так котаны. Есть кот:
```
std::function<int()> CreateCounter(int a) {
return [=]() mutable -> int{
return ++a;
};
}
```
Делает все что я хочу, но есть ли метод не даунгрейдить замыкание до функции а как-то вывести ее тип и вернут таки замыкание?
Shchvova
? C++ ктате, вопрос знатокам, как используется : в C++ кроме тринарного оператора? Т.е. почему будет плохим задавать именованные параметры через двоеточие?
типа void F(int a, inb b=0, c=0);
call:
F(1, c:-1)
Shchvova
C++ code
фак ех! Помните я думал как сделать эллипсис. Ну общим, написал вроде решение используя функциональное программирование и variadic templates

#include <iostream>

template <typename T>
void add(T e) {
    std::cout<<e<<std::endl;
}

template <typename... Elements> void AddListOfItems(Elements... es);

template <typename T, typename... Elements>
inline void AddListOfItems(T e, Elements... es) {
    add(e);
    AddListOfItems(es...);
}

template <> 
inline void AddListOfItems(){}

int main()
{
    AddListOfItems(1,2,3,4,5, "hell");
}

Потыкать можно тут: https://compilr.com/shchvova/ellipsis-function-test/ConsList.cpp
А теперь вопрос. Какие возможные проблемы у этой штуки? Ну, по моему, она статична и офигенна, и с безопасными типами. Например, если поменять add(Т е) на  add(int e) то можно будет посылать только типы приводимые к int.
Ну клева ведь, C++11 в действии
Shchvova
C++ code
Вот, соченил. Я этому не доверяю, но работает

#define ARRSIZE(arr) (sizeof(arr)/(sizeof(*(arr))))

#define AddItemArray( mp, cha, args...) \
do{   \
    int ar[] = { args };\
    int sz = ARRSIZE(ar);    \
    for(int i=0; i<sz; i++)   \
        L_AddHint(mp, ar[i], cha); \
}while(0)
Shchvova
? C++ WTF ну общим, а что нельзя из эллипсиса получить количество параметров? Какой жопой это дизайнили то? Ну общим, задача. Есть функция, и ей нужно передавать массив и его размер. Вызовов функции очень много, и массив там на каждом вызове забит статично. Я попытался переписать на func(int a, int b, ...) и в конец дописать все елеметы. Было вот так func(int a, int b, (int[]){1,2,3,4,4,5} )
Оба случая носят проблему что внутри func непонятно какого размера список. Ну что за хуета то, просто нервно типает от того что нету простого метода сделать что-то для статичного списка. Есть идеи? У меня gcc, так что можно какой то макрос с __VA_ARGS__
Shchvova
C++ code
решения оказалось простым:
struct SStoreCat;

struct SCat {
    int category;
    SCat *children;
};

static const SCat storeCategories[] =
{
    {1 ,NULL},
    {2 , (SCat[]){
        {3, NULL}
    }  },
};

йоу
Shchvova
? C++ очень хочеться в статическом коде захардкодить небольшой граф магазина. Идеи?
Вообще просто хочу в С++ воссоздать создание из дсона типа
{category_data:"root data", cildren:[
{category_data:"data1", cildren:[{category_data:"data11", cildren:null}]},
{category_data:"data2", cildren:null}
]}

А на плюсцах можно захардкодить такую вот структурку?
Shchvova
? C++ программирование Есть ли хоть что-то опасное при переезде с 32 на 64 бита и обратно кроме ошибок типа int вместо 'size-type', хардкода размеров и странных юнионов?
(по последним 2м из 3х пунктов примера сходу не придумал, но допускаю что можно)
Shchvova
C++ C# С Интересный вопрос: какое из условий корректное и будет правильно работать (other — локальная):
1) if (other==null || other.parent != entity) func();
2) if (other!=null && other.parent != entity) func();
Shchvova
C++ Посыпал голову пеплом. Почему я думал что это должно работать?
union{
unsigned char dummy;
bool b[8];
};
Ведь логичто ж что лажа...
Shchvova
C++ PHP В процессе переосмысливания понял, то за что я лично считаю пехепе быдлоязыком присутствует в таком же размере и в любимом С++... Печаль.