Форум программистов, компьютерный форум CyberForum.ru

Сравнение std::function с необходимым каллбеком - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Выход за пределы массива http://www.cyberforum.ru/cpp-beginners/thread1774313.html
#include <assert.h> #include <assert.h> #include <string.h> #include <stdint.h> #include <limits.h> int get_bit(const void *in, size_t n) { return (((const uint8_t*)in) & (1 << (n % CHAR_BIT))) != 0; }
C++ Получить доступ к локальной переменной другой функции Что не так?Можно ли тут обойтись без указателя? #include <iostream> using namespace std; int a = 0; void m(void) { extern int b; a++; b++; } http://www.cyberforum.ru/cpp-beginners/thread1774304.html
Выделение и очистка динамической памяти C++
Добрый день. Никак не могу найти информацию по следующему вопросу. Допустим создаем динамический массив строк. char** mass=new char* for (int i=0;i<count;i++) { mass=new char ; }
C++ Препроцессор vs текст
Привет. Я баловался с директивами препроцессора и как-то задумал с помощью директивы #include вставить текст в char *. У меня вышло, я вставил текст типа "test!". test.txt: "test!" main.cpp: #include <iostream> constexpr char * line =
C++ Указатели и динамическая память http://www.cyberforum.ru/cpp-beginners/thread1774276.html
Здравствуйте. Почему размер памяти для указателя выделяется такой же как для объекта в куче. Например: int * pVar = new int;Как я понял, память для указателя выделяется в стеке, но тип (размер) должен совпадать с типом памяти выделяемой в куче. Если, например, объект myObj занимает много памяти, то память в стеке расходуется попусту т.к. она содержит только адрес объекта в куче. myObj * pVar =...
C++ Перенести все числа массива меньшие первого элемента в начало Выполните сортировку массива следующим образом. Все числа меньшие первого должны предшествовать этому первому числу, а все большие него идти за ним. Заранее спасибо. подробнее

Показать сообщение отдельно
rikimaru2013
C++ Game Dev
2379 / 1073 / 235
Регистрация: 30.11.2013
Сообщений: 3,563

Сравнение std::function с необходимым каллбеком - C++

01.07.2016, 16:55. Просмотров 286. Ответов 12
Метки (Все метки)

Добрый день,

из - за захвата this не работает проверка каллбека на корректность - onAppStart3 - как с этим бороться -

Кликните здесь для просмотра всего текста
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <functional>
using namespace std;
 
//////////////////////////////////////////////////////////////////////////
class IFoo
{
public:
    virtual void onAppStarted( int, int ) = 0;
};
//////////////////////////////////////////////////////////////////////////
template <typename T>
struct FunctionTypeDeduction;
 
template<class ClassType, class ReturnType, class... Args>
struct FunctionTypeDeduction< ReturnType( ClassType::* )( Args... ) >
{
    using type                                  = ReturnType( *)( Args... );
    using functorType                           = std::function<ReturnType( Args... ) >;
};
//////////////////////////////////////////////////////////////////////////
class SubcribeSystem
{
public:
    using tSomeMethodType                       = FunctionTypeDeduction< decltype( &IFoo::onAppStarted ) >::type;
    using tSomeMethodCallback                   = FunctionTypeDeduction< decltype( &IFoo::onAppStarted ) >::functorType;
 
public:
    void subribeOnSomeMethod( const tSomeMethodCallback& arr )
    {
        arr( 3, 19 );
    }
};
#define SUBCRIBE_FOR_SOMEMETHOD( eventsObj, lambda )                    \
    do                                                                  \
    {                                                                   \
        SubcribeSystem::tSomeMethodType const func_ptr = lambda;        \
        eventsObj.subribeOnSomeMethod( lambda );                        \
    }                                                                   \
    while(false);                                                       
//////////////////////////////////////////////////////////////////////////
class Bar
{
public:
    void fn( SubcribeSystem& events )
    {
        auto onAppStart = []( int width, int height )
        {
            cout << width << " " << height << endl;
        };
        auto onAppStart2 = []( bool width, int height )
        {
            cout << width << " " << height << endl;
        };
        auto onAppStart3 = [this]( int width, int height )
        {
            cout << width << " " << height << endl;
            someOtherMethod( width );
        };
        SUBCRIBE_FOR_SOMEMETHOD( events, onAppStart );      // expect all ok    
        //SUBCRIBE_FOR_SOMEMETHOD( events, onAppStart2 );   // expect error cause bool first param  
        SUBCRIBE_FOR_SOMEMETHOD( events, onAppStart3 );     // expect all ok, but not !!!
    }
    void someOtherMethod( int x )
    {
        cout << "processed callback " << x << endl;
    }
};
int main()
{
    Bar bar;
    SubcribeSystem sub;
    bar.fn( sub );
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru