Другое С/С++ Вопрос - Ответ

ARMOR

kjor32 is legend
Модератор
4,851
6,081
Дайте пожалуйста документацию/гайд по созданию ini/json конфигов. Что-то находил, но не совсем понимал что да как
 

loganhackerdff

Известный
868
517
никто не знает как убрать лимит в сампе на 20000 моделей в .ide, типа я как всегда не нашёл нихуя в иде)
 
  • Нравится
Реакции: Z3roKwq

Savchik Blazer

Но я, мечту свою лелея...
Проверенный
671
293
есть у кого-нибудь DevKitPSP? Если есть скиньте пожалуйста
 

AdCKuY_DpO4uLa

Известный
287
477
Как создать лямбда-функцию с определенным соглашением о вызове? К примеру, есть такая лямбда
C++:
auto func = [](int a, int b) { return a + b; };
Как явно указать, что она должна быть __stdcall функцией?
 
  • Клоун
Реакции: Fott

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
Как создать лямбда-функцию с определенным соглашением о вызове? К примеру, есть такая лямбда
C++:
auto func = [](int a, int b) { return a + b; };
Как явно указать, что она должна быть __stdcall функцией?
Она сама кастуется.
При желании можно static_cast<R(__stdcall*)(Args…)>()
 

AdCKuY_DpO4uLa

Известный
287
477
есть такой код
C++:
class CClass {
private:
    template<typename T>
    using callbacks = std::vector<T>;

    using SomeCallback_t = void(__stdcall*)(int, int);
 
    callbacks<SomeCallback_t> vecCallBacks;
public:
    inline auto operator += (SomeCallback_t func) -> void {
        vecCallBacks.push_back(func);
    };

    inline auto ProcessCallBack(int a, int b) -> void {
        printf("start of calling\n");
        for (auto i : vecCallBacks) {
            i(a, b);
        }
        printf("end of calling\n");
    };
};

int main()
{
    CClass tmp;

    int var1 = 10;

    tmp += [&](int a, int b)
    {
        var1++;
        printf("%d + %d = %d\n", a, b, a + b);
    };

    while (true) {
        tmp.ProcessCallBack(rand() % 100, rand() % 100);
        Sleep(300);
    }

    return 0;
}
Если указывать лямбду без захвата по ссылке, всё работает, однако, если попытаться создать лямбду с захватом переменных по ссылке, пишет, что нет перегруженного оператора +=, вопрос в том, как сделать так, чтобы лямбда
C++:
tmp += [&](int a, int b)
{
        var1++;
        printf("%d + %d = %d\n", a, b, a + b);
};
захватывала переменные по ссылке?
 
  • Клоун
Реакции: Fott

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
есть такой код
C++:
class CClass {
private:
    template<typename T>
    using callbacks = std::vector<T>;

    using SomeCallback_t = void(__stdcall*)(int, int);
 
    callbacks<SomeCallback_t> vecCallBacks;
public:
    inline auto operator += (SomeCallback_t func) -> void {
        vecCallBacks.push_back(func);
    };

    inline auto ProcessCallBack(int a, int b) -> void {
        printf("start of calling\n");
        for (auto i : vecCallBacks) {
            i(a, b);
        }
        printf("end of calling\n");
    };
};

int main()
{
    CClass tmp;

    int var1 = 10;

    tmp += [&](int a, int b)
    {
        var1++;
        printf("%d + %d = %d\n", a, b, a + b);
    };

    while (true) {
        tmp.ProcessCallBack(rand() % 100, rand() % 100);
        Sleep(300);
    }

    return 0;
}
Если указывать лямбду без захвата по ссылке, всё работает, однако, если попытаться создать лямбду с захватом переменных по ссылке, пишет, что нет перегруженного оператора +=, вопрос в том, как сделать так, чтобы лямбда
C++:
tmp += [&](int a, int b)

    {

        var1++;

        printf("%d + %d = %d\n", a, b, a + b);

    };
захватывала переменные по ссылке?
лямбда с захватом это объект с состоянием, поэтому она не кастуется в простую функцию
 

sc6ut

неизвестный
Модератор
382
1,075
есть такой код
C++:
class CClass {
private:
    template<typename T>
    using callbacks = std::vector<T>;

    using SomeCallback_t = void(__stdcall*)(int, int);
 
    callbacks<SomeCallback_t> vecCallBacks;
public:
    inline auto operator += (SomeCallback_t func) -> void {
        vecCallBacks.push_back(func);
    };

    inline auto ProcessCallBack(int a, int b) -> void {
        printf("start of calling\n");
        for (auto i : vecCallBacks) {
            i(a, b);
        }
        printf("end of calling\n");
    };
};

int main()
{
    CClass tmp;

    int var1 = 10;

    tmp += [&](int a, int b)
    {
        var1++;
        printf("%d + %d = %d\n", a, b, a + b);
    };

    while (true) {
        tmp.ProcessCallBack(rand() % 100, rand() % 100);
        Sleep(300);
    }

    return 0;
}
Если указывать лямбду без захвата по ссылке, всё работает, однако, если попытаться создать лямбду с захватом переменных по ссылке, пишет, что нет перегруженного оператора +=, вопрос в том, как сделать так, чтобы лямбда
C++:
tmp += [&](int a, int b)
{
        var1++;
        printf("%d + %d = %d\n", a, b, a + b);
};
захватывала переменные по ссылке?
юзай std function
 
  • Нравится
Реакции: AdCKuY_DpO4uLa

Ltall

Потрачен
15
7
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

AdCKuY_DpO4uLa

Известный
287
477
Как исправить? https://prnt.sc/KKZw_b8gTUPz

В препроцессоре стоит /NODEFAULTLIB:libcmt.lib
 
  • Клоун
Реакции: Fott