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

tuple foreach - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ генератор чисел http://www.cyberforum.ru/cpp/thread527772.html
здравствуйте, уважаемые форумчане! есть вопрос - возможно ли сделать генератор случайных чисел с заданными пределами чисел. к примеру от 342.94 до 355.32?
C++ Программа калькулятор для сканера работаю в крупноу международной организации, подготавливаю заказы для клиентов, таких как кафе, трейдеры и тп. используем в ходе работы сканеры штрихкодов Моторола MC 9000, на виндовс мобайл, какая версия уточнить не могу, ибо для рботы доступны только обычный калькулятор, внутренняя программа распознания штрихкодов, и внешняя программа, а еще точнее ссылка на общую сеть организации через... http://www.cyberforum.ru/cpp/thread526831.html
C++ Онлайн игра, как сделать скрин ботов.
пытаюсь создать игру . помогите с скрипт ботовдля игры неверланс. они подойдут и для моей игры.
C++ Что такое файловые пакеты и как их расшифровать?
Что такое файловые пакеты и как их расшифровать? как с этим работать ? Вот например:
C++ Делаю БД на C++ нужна русская кириллица для Windows 7 http://www.cyberforum.ru/cpp/thread522693.html
Хочу сделать БД Paradox нужна русская кириллица. Подскажите, где мне это скачать и как установить?
C++ C99 - массивы переменной длины Прочитал в википедии, что стандарт C99 предполагает поддержку массивов переменной длины. Признаться для меня это небольшой разрыв шаблона. Если кто-нибудь знает по поводу этой особенности, расскажите пожалуйста как она выражена в Си (то есть как объявляется этот переменный массив и т.д.) и какие компиляторы ее поддерживают (в частности gcc). Вообщем, кто что знает по этому поводу? подробнее

Показать сообщение отдельно
cyberguz
6 / 6 / 0
Регистрация: 01.12.2010
Сообщений: 105

tuple foreach - C++

27.03.2012, 13:57. Просмотров 1246. Ответов 1
Метки (Все метки)

Взял за основу вот это
http://stackoverflow.com/questions/5...r-of-arguments

способ заработал после небольших изменений:
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
template <size_t i, template <class Arg> class UnaryFunction, class... Tp>
struct UnaryFunctionTupleElement;
 
template <size_t i, template <class Arg> class UnaryFunction, class Head, class... Tail>
struct UnaryFunctionTupleElement <i, UnaryFunction, std::tuple<Head, Tail...> > :
    UnaryFunctionTupleElement <i - 1, UnaryFunction, std::tuple<Tail...> > {};
 
template <template <class Arg> class UnaryFunction, class Head, class... Tail>
struct UnaryFunctionTupleElement <0, UnaryFunction, std::tuple<Head, Tail...> >
{
    static void call (Head& arg)
    {
        UnaryFunction<Head>uf;
        uf(arg);
    }
};
 
template <size_t I, size_t N, template <class Arg> class UnaryFunction, class... Tp>
struct for_;
 
template <size_t N, template <class Arg> class UnaryFunction, class... Tp>
struct for_<N, N, UnaryFunction, std::tuple<Tp...> >
{
    static void call (std::tuple<Tp...>&) {}
};
 
template <size_t I, size_t N, template <class Arg> class UnaryFunction, class... Tp>
struct for_ <I, N, UnaryFunction, std::tuple<Tp...> >
{
    static void call (std::tuple<Tp...>& t)
    {
        UnaryFunctionTupleElement<I, UnaryFunction, std::tuple<Tp...> >::call(std::get<I>(t));
        for_<I + 1, N, UnaryFunction, std::tuple<Tp...> >::call(t);
    }
};
 
template <template <class Arg> class UnaryFunction, class Tuple>
inline void for_each (Tuple& t)
{
    for_<0, std::tuple_size<Tuple>::value, UnaryFunction, Tuple>::call(t);
}
 
// использование
 
template <class Arg>
struct print_arg
{
    void operator() (Arg& a) {std::cout << a << std::endl;}
};
 
int main ()
{
     auto tup = std::make_tuple(10, 'a', "string");
     sss::for_each<print_arg>(tup);
}

а такой вариант (который первоначально получился) не заработал:
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
template <size_t I, size_t N, template <class Arg> class UnaryFunction, class Tuple>
struct for_;
 
template <size_t N, template <class Arg> class UnaryFunction, class Tuple>
struct for_<N, N, UnaryFunction, Tuple>
{
    static void call (Tuple&) {}
};
 
template <size_t I, size_t N, template <class Arg> class UnaryFunction, class Tuple>
struct for_
{
    static void call (Tuple& t)
    {
/*
В следующей строке выдаёт ошибку:
error: type/value mismatch at argument 1 in template parameter list for 'template<class Arg> class  UnaryFunction'
error:   expected a type, got 'std::tuple_element<I, Tuple>::type'
*/
        UnaryFunction<std::tuple_element<I, Tuple>::type> uf; 
        uf(std::get<I>(t));                                                  
        for_<I + 1, N, UnaryFunction, Tuple>::call(t);
    }
};
 
template <template <class Arg> class UnaryFunction, class Tuple>
inline void for_each (Tuple& t)
{
    for_<0, std::tuple_size<Tuple>::value, UnaryFunction, Tuple>::call(t);
}
Почему компилятор не вычисляет std::tuple_element<I, Tuple>::type ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru