Форум программистов, компьютерный форум 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; подробнее

Показать сообщение отдельно
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
05.08.2014, 18:03     Шаблоны, рекурсия, определение типов std::function
Может уже не надо, но я как раз дописывал свое:
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
#include <iostream>
#include <tuple>
#include <utility>
#include <functional>
#include <vector>
 
template <size_t I = 0, typename Action, typename... Args>
typename std::enable_if<I == sizeof...(Args)>::type
for_each(std::tuple<Args...>&, Action)
{
}
 
template <size_t I = 0, typename Action, typename... Args>
typename std::enable_if<I != sizeof...(Args)>::type
for_each(std::tuple<Args...> &tuple, Action please)
{
   please(std::get<I>(tuple));
   for_each<I + 1, Action, Args...>(tuple, please);
}
 
 
template <typename R>
struct function_traits {};
 
template <typename R, typename... Args>
struct function_traits<std::function<R(Args...)> >
{
   typedef std::tuple<Args...> type;
};
 
struct inserter {
   std::vector<std::string>& v;
 
   inserter(std::vector<std::string>& v_) : v(v_) {}
 
   template <typename T>
   void operator()(const T& value)
   {
      v.push_back(typeid(value).name());
   }
};
 
 
int main()
{
   typedef function_traits<std::function<int(int, long, std::string, double)> >::type tuple_t;
   tuple_t t;
   std::vector<std::string> v;
   for_each(t, inserter(v));
 
   for (auto& s : v)
      std::cout << s << "\n";
}
Добавлено через 2 часа 28 минут
Подкину еще такое:
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
#include <iostream>
#include <functional>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/for_each.hpp>
 
namespace mpl = boost::mpl;
 
template <typename R>
struct get_arguments
{};
 
template <typename R, typename... Args>
struct get_arguments<std::function<R(Args...)> >
{
   typedef typename mpl::vector<Args...>::type type;
};
 
struct printer
{
   template <typename U>
   void operator()(const U& x) const
   {
      std::cout << typeid(x).name() << '\n';
   }
};
 
int main()
{
   typedef std::function<int(int, char, double, short, size_t)> func_type;
 
   typedef get_arguments<func_type>::type args;
   mpl::for_each<args>(printer());
}
 
Текущее время: 14:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru