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

Переменное число аргументов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ В одномерном массиве с чётным количеством элементов 2N http://www.cyberforum.ru/cpp-beginners/thread637544.html
#include <iostream> #include <iomanip> #include <vector> #include <cmath> using namespace std; int main() { int n; float a;
C++ Огромный размер массива Как присвоить массиву типу char размер 10100. Или придется писать char mass[1000000... Может есть какая функция, увеличивающая размер массива? http://www.cyberforum.ru/cpp-beginners/thread637530.html
C++ cpp, перегрузка операторов
Здравствуйте. Можете, пожалуйста, объяснить, как, например, перегрузить операцию умножения вида const obj& operator*(double а), только справа. Сам сделал следующее: friend const orbital operator*(double c,const obj&M);.... const obj operator*(double c,const obj&M) { obj m(M); (M.coef)*=c; return m; } Хотелось бы, чтоб оператор принимал double и одну const obj&M и возвращал ссылку.
C++ Подсчитать количество пар
Дан массив чисел а1,...,аn. Выяснить, имеются ли в данном массиве два идущих подряд положительных элемента. Подсчитать количество таких пар.
C++ В упорядоченном по убыванию массиве найти разность между наименьшим значением и последним элементом, большим Р http://www.cyberforum.ru/cpp-beginners/thread637464.html
В упорядоченном по убыванию массиве найти разность между наименьшим значением и последним элементом, большим Р.
C++ Факториал Дано целое число N (> 0). Найти двойной факториал N: N!! = N•(N–2)•(N–4)•… (последний сомножитель равен 2, если N — четное, и 1, если N — нечетное). Чтобы избежать целочисленного переполнения, вычислять это произведение с помощью вещественной переменной и вывести его как вещественное число. Помогите пожалуйста с задачей подробнее

Показать сообщение отдельно
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
15.08.2012, 16:16     Переменное число аргументов
Pure, Зарыта конечно. Шаблонное метапрограммирование на С++ в любом случае сводится к рекурсивной раскрутке шаблонов.
for_each к примеру.
mpl::for_each
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
template< bool done = true >
struct for_each_impl
{
    template<
          typename Iterator
        , typename LastIterator
        , typename TransformFunc
        , typename F
        >
    static void execute(
          Iterator*
        , LastIterator*
        , TransformFunc*
        , F
        )
    {
    }
};
 
template<>
struct for_each_impl<false>
{
    template<
          typename Iterator
        , typename LastIterator
        , typename TransformFunc
        , typename F
        >
    static void execute(
          Iterator*
        , LastIterator*
        , TransformFunc* 
        , F f
        )
    {
        typedef typename deref<Iterator>::type item;
        typedef typename apply1<TransformFunc,item>::type arg;
    
        // dwa 2002/9/10 -- make sure not to invoke undefined behavior
        // when we pass arg.
        value_initialized<arg> x;
        aux::unwrap(f, 0)(boost::get(x));
        
        typedef typename mpl::next<Iterator>::type iter;
        for_each_impl<boost::is_same<iter,LastIterator>::value>
            ::execute( static_cast<iter*>(0), static_cast<LastIterator*>(0), static_cast<TransformFunc*>(0), f);
    }
};
 
} // namespace aux
 
// agurt, 17/mar/02: pointer default parameters are necessary to workaround 
// MSVC 6.5 function template signature's mangling bug
template<
      typename Sequence
    , typename TransformOp
    , typename F
    >
inline
void for_each(F f, Sequence* = 0, TransformOp* = 0)
{
    BOOST_MPL_ASSERT(( is_sequence<Sequence> ));
 
    typedef typename begin<Sequence>::type first;
    typedef typename end<Sequence>::type last;
 
    aux::for_each_impl< boost::is_same<first,last>::value >
        ::execute(static_cast<first*>(0), static_cast<last*>(0), static_cast<TransformOp*>(0), f);
}
 
template<
      typename Sequence
    , typename F
    >
inline
void for_each(F f, Sequence* = 0)
{
    for_each<Sequence, identity<> >(f);
}
 
Текущее время: 08:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru