С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Lambda crash - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычисление периметра треугольника, заданного координатами своих вершин http://www.cyberforum.ru/cpp-beginners/thread1834113.html
Прошу помогите если можете. Треугольник заданный координатами x1, y1, x2, y2, x3, y3 своих вершин. склвсты программу для вычисления периметра треугольника. Значение x1, y1, x2, y2, x3, y3...
C++ Куда return возвращает результат из функции? Добрый день . возник вопрос куда возвращает return из функции , то что он должен возвратить? Я думал он возвращает результат туда где он вызывается #include <iostream> #include <ctime>... http://www.cyberforum.ru/cpp-beginners/thread1834083.html
C++ Сформировать и вывести на экран массив индексов минимальных элементов
Сформировать и вывести на экран массив индексов минимальных элементов: 1. столбцов матрицы 2. строк матрицы
Написать программу, моделирующую поиск в ширину при прямом выводе C++
Написать программу, моделирующую поиск в ширину при прямом выводе. Буду очень благодарен. )
C++ Записать в файл несколько строк, а затем записать несколько строк из этого файла в другой http://www.cyberforum.ru/cpp-beginners/thread1834058.html
Заранее создать текстовый файл 1.txt и записать в него несколько строк текста. Программа должна получить из него второй файл 2.txt, в который записать n-последующих строк исходного файла. n ввести с...
C++ Найти количество положительных элементов массива; найти сумму элементов, расположенных после заданного В одномерном массиве, состоящем из n целых элементов, вычислить: 1) Количество положительных элементов массива; 2) Сумму элементов массива, расположенных после последнего элемента,равного нулю; 3)... подробнее

Показать сообщение отдельно
maxm
62 / 34 / 8
Регистрация: 17.07.2014
Сообщений: 456

Lambda crash - C++

25.10.2016, 12:50. Просмотров 256. Ответов 10
Метки (Все метки)

Есть класс в продакшне. В одном из методов (они все static) обьявляю лямбду, в ней вызываю перегруженный метод из того же класса. Но она его не видит. Я сделал поинтер в методе и передал в capture лист - и она сьела! Но второй метод, который не имеет перегрузок, не выдал ошибки, все заработало. Только вот креш при его вызове. Почему так может быть?

Вот рабочий example код, как все выглядело. Есть идеи, почему такое может не работать? Даже если явно указать имя пространства класса, из которого я вызываю метод в лямбде. Сорс код продакшна не могу привести, слишком много. Да и ошибки явной нету, заметили бы.


C++
1
2
3
4
5
6
7
//MyClass.hpp
class MyClass
{
    void foo(int a, int b);
    void foo(const char* ch);
    void bar(int a);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//MyClass.cpp
#include "myclass.hpp"
 
void MyClass::foo(int a, int b)
{
 
}
 
void MyClass::foo(const char* ch)
{
 
}
 
void MyClass::bar(int a)
{
 
}
 
void MyClass::test()
{
        // не компилит, если не передать поинтер на метод
    auto lambda = []()
    {
        bar(0); // результат тот же
        foo(1,2); // что так 
        MyClass::foo("Wow"); // что так
    };
 
        void(*pointer)(int a, int b); // так ОК
    auto lambda2 = [pointer]()
    {
        pointer(1, 2);
    };
 
    lambda();
}
C++
1
2
3
4
5
6
7
8
9
// main.cpp
#include "myclass.hpp"
#include <Windows.h>
 
int main()
{
    MyClass::test();
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.