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

Непонятен синтаксис шаблонов из кода boost для вычисления факториала - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написание програмы по полёту ракеты http://www.cyberforum.ru/cpp-beginners/thread1798523.html
Очень надеюсь, что найдётся человек, которому не лень помочь. Просто я сильно провтыкался с дэдлайном в ВУЗе и сейчас в форсированом режиме делаю курсовую, так-как бедный студент приобрести не могу, но если появятся деньги могу отблагодарить за помощь. Курсовая довольно-таки обширная и програма это лишь малая часть, но с ней проблем у меня с головой, ведь языки програмирования знаю очень слабо,...
C++ Вектор выходит за диапазон Здравствуйте. :) Как сделать так чтобы вектор не выходил за диапазон? #include <iostream> #include <vector> using namespace std; int main() { int k; http://www.cyberforum.ru/cpp-beginners/thread1798512.html
C++ Com port и С++
Хочу отослать данные по ком порту на контроллер.Вот только беда,не отсылается всё сообщение,а только один символ.Как это исправить? LPCTSTR sPortName = L"COM4"; CString ed=L"asdasd"; CString q=L"k"; hSerial = ::CreateFile(sPortName,GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); ed=ed+q; char buffer;
Сформировать массив неповторяющихся элементов исходного массива C++
Сформировать массив из неповторяющихся элементов исходного массива. Например : Из массива A = {2,5,2,6,8,5,1,9,4,3 } нужно получить массив B ={6,8,1,9,4,3,0,0,0,0}. Или B={6,8,1,9,4,3) что даже лучше. Цифры могут быть любыми как и размер исходного массива. Мой код: #include <iostream> #include <clocale> using namespace std; void main() { int A = { 2,5,2,6,8,5,1,9,4,3 }, B = { 0 },...
C++ Функция strlen перед вызовом моей функции портит строку в конфигурации Release MS Visual C++ 2013 http://www.cyberforum.ru/cpp-beginners/thread1798377.html
Написал функцию RemoveChars, которая убирает символы перевода строки в строке. Если в конфигурации проекта Visual C++ в Microsoft Visual Studio 2013 установлено Debug, проблем нет. Если перед вызовом функции RemoveChars вызывается функция strlen, а после нее RemoveChars, в конфигурации Release RemoveChars выдает пустую строку или короткую строку с мусором. RemoveChars(str1) выдает нормальную...
C++ Сгенерировать заголовочный файл для .lib (созданной в Maple) Доброго, форумчане! у меня нет опыта в кодинге на с++ и это мой первый пост) хочется подключить lib файл (созданный в maple) к .net проекту. Основываюсь на этой статье для начало реализовал на vs2010 пример из статьи и открыл в хекс редакторе и обнаружил некоторую закономерность в результате которого я смог написать заголовочный файл к простенькому примеру но с lib от maple все иначе... подробнее

Показать сообщение отдельно
cyberk20
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 21
25.08.2016, 11:51     Непонятен синтаксис шаблонов из кода boost для вычисления факториала
Доброго дня, уважаемые форумчане. Просьба ответить на вопрос в чем смысл дивных конструкций из примера внизу.
http://www.boost.org/doc/libs/1_48_0.../factorial.cpp

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
/*=============================================================================
    Copyright (c) 2001-2003 Joel de Guzman
 
    Distributed under the Boost Software License, Version 1.0. (See accompanying 
    file LICENSE_1_0.txt or copy at [url]http://www.boost.org/LICENSE_1_0.txt[/url])
==============================================================================*/
#include <vector>
#include <algorithm>
#include <iostream>
#include <boost/phoenix/core.hpp>
#include <boost/phoenix/function.hpp>
 
struct factorial_impl
{
    template <typename Sig>
    struct result; 
    
    template <typename This, typename Arg> // ага вот эти "конструкции"
    struct result<This(Arg)> : result<This(Arg const &)> // o_O
    {};
 
    template <typename This, typename Arg> // и эти
    struct result<This(Arg &)> // 0_O
    {
        typedef Arg type; 
    };
 
    template <typename Arg>
    Arg operator()(Arg n) const
    {
        return (n <= 0) ? 1 : n * this->operator()(n-1);
    }
};
 
 
int
main()
{
    using boost::phoenix::arg_names::arg1;
    boost::phoenix::function<factorial_impl> factorial;
    int i = 4;
    std::cout << factorial(i)() << std::endl;
    std::cout << factorial(arg1)(i) << std::endl;
    return 0;
}
Просьба объяснить что это за шаблонные параметры <This(Arg)>, <This(Arg&)>, <This(const Arg&)> - похоже как если бы в качестве шаблонного параметра передавались бы конструкторы класса This с аргументом Arg, но это для меня выглядит клинопись полная.

Буду благодарен за линк на подробный разбор похожих примеров для новичков.

Спасибо)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru