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

Шаблоны, рекурсия, определение типов std::function - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Поток, удаляющий элементы, воспринимает контейнер пустым http://www.cyberforum.ru/cpp-beginners/thread1238637.html
Есть два потока, один только кладет в контейнер, другой удаляет элемент, почему то поток который удаляет элемент, воспринимает контейнер пустым. //mutex pthread_mutex_t count_mutex; //поток кладет в контейнер void put1 (multimap <int, int> *map2) { multimap <int, int> *map3 = map2; while (1)
C++ Остановка программы без предложения "Нажать любую клавишу" в чистых сях для остановки в конце программы (чтобы не закрылась) я юзал getch, а что юзать в плюсах? кроме system("pause")? потому что если мне допустим не нравится что там оно пишет "нажмите любую клавишу", хочу чтоб просто останавливалось и ждало нажатия... http://www.cyberforum.ru/cpp-beginners/thread1238632.html
C++ Считать строку с пробелами с помощью Std::cin
перехожу с чистого си на плюсы, начал разбираться с cin и заметил такую штуку что она читает введенную строку только до первого же пробела... а как сделать чтобы всю строку читала? вот например так делаю: #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv) { cout << "Hello world !\n";
C++ Mircosoft Visio Export AddIn, есть у кого нибуть сэмпл на плюсах ?
Доброго! Может кто писал для Visio плагины? Есть ли линк или сэмпл на С++ для экспорта модели ? Ну или на шарпе на крайний случай :D Ну или линк на док по описанию девелопмента плагинов ...
C++ Пройти по любому разрешенному пути игрового поля от верхнего левого угла до правого нижнего http://www.cyberforum.ru/cpp-beginners/thread1238591.html
Всем привет! Решаю вот такую простую задачку: Игровое поле N x M заполняется целыми числами, одно неотрицательное целое число в каждой клетке. Цель игры состоит в том, чтобы пройти по любому разрешенному пути от верхнего левого угла до правого нижнего. Целое число в каждой клетке указывает, какой длины шаг должен быть из текущей клетки. Все шаги могут быть или направо или вниз. Если в...
C++ Правильно ли реализована передача указателя на контейнер Я сомневаюсь, правильно ли я передаю указатель на контейнер void put (multimap <int, int> *map2) { multimap <int, int> map3 = *map2; map3.erase( map3.begin () ); } int main() { multimap <int, int> mapp; подробнее

Показать сообщение отдельно
DrOffset
6426 / 3800 / 880
Регистрация: 30.01.2014
Сообщений: 6,594
05.08.2014, 14:52     Шаблоны, рекурсия, определение типов std::function
stima, тебе не нужен tuples тут. Т.к. он некорректно будет работать, если у функции нет аргументов.
Вот я примерно накидал:
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
75
76
77
78
79
80
#include <vector>
#include <iostream>
#include <functional>
#include <type_traits>
#include <iterator>
#include <algorithm>
 
template <size_t N, typename F>
struct function_arg_num;
 
template <size_t N, typename R, typename Arg, typename ...Args>
struct function_arg_num<N, R(Arg, Args...)>
{
    typedef typename function_arg_num<N - 1, R(Args...)>::type type;
};
 
template <typename R, typename Arg, typename ...Args>
struct function_arg_num<0, R(Arg, Args...)>
{
    typedef Arg type;
};
 
template <size_t N, typename R>
struct function_arg_num<N, R()>
{
    typedef void type;
};
 
template<typename T>
struct function_traits;
 
template<typename R, typename ...Args>
struct function_traits<std::function<R(Args...)>>
{
    static const size_t nargs = sizeof...(Args);
 
    typedef R result_type;
 
    template <size_t I>
    using arg = typename function_arg_num<I, R(Args...)>::type;
};
 
template <typename FType, typename FTraits = function_traits<FType>>
struct inserter
{
    template <size_t NArgs, typename Container>
    struct insert_helper
    {
        enum { Idx = NArgs - 1 };
 
        static void back_insert(Container & c)
        {
            c.push_back(typeid(typename FTraits::template arg<Idx>).name());
            insert_helper<NArgs - 1, Container>::back_insert(c);
        }
    };
    template <typename Container>
    struct insert_helper<0, Container>
    {
        static void back_insert(Container & c)
        {
        }
    };
 
    template <typename Container>
    static void back_insert(Container & c)
    {
        insert_helper<FTraits::nargs, Container>::back_insert(c);
    }
};
 
int main()
{
    typedef std::function<int(int, char)> func_type;
 
    std::vector<std::string> v;
    inserter<func_type>::back_insert(v);
 
    std::copy(v.begin(), v.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
 
Текущее время: 19:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru