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

Полная спецификация шаблона в перемешку с SFINAE - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Не выводятся на экран значения элементов массива http://www.cyberforum.ru/cpp-beginners/thread1630346.html
const int arraySize = 10; int data = { 34, 56, 4, 10, 77, 51, 93, 30, 5, 52 }; cout << "Unsorted array:\n"; for(int i = 0; i < arraySize; ++i) cout << setw(4) << data; Кроме строчки "Unsorted array" ничего больше не выводится. Если заюзать, к примеру, std::endl после цикла, то всё ОК. Как то можно решить данную проблему? И вообще, в связи с чем этот трабл?
C++ Вычислить сумму ряда целых чисел кратных 3 которая меньше 21 Вычислить сумму ряда целых чисел кратных 3, которая меньше 21. Вывести результат, последний член и количество итераций http://www.cyberforum.ru/cpp-beginners/thread1630332.html
надо доработать функцию вычисления островов C++
#include <iostream> using namespace std; int Odisland(int mass) { int count = 0; for (int i = 1; i < 10; i++) { for (int k = 1; k < 10; k++) { if (mass == 1) {
Проверить принадлежит ли введенное число заданному диапазону C++
Введіть з клавіатури два числадля більшого з них числа перевірте чи знаходиться воно вдіапазоні від 5до30 Ввести 2 числа. Для большего из них проверить принадлежит ли оно диапазону от 5 до 30. Напишите программу, которая позволяет вводить данные, использует вложенный условный оператор, и выводит на экран 4 соответствующих сообщения.
C++ Получение времени в С++, time.h http://www.cyberforum.ru/cpp-beginners/thread1630317.html
Всем доброго времени суток. Сталкиваюсь с проблемой получения времени. Под запись в БД мне необходимо получить именно СЕКУНДЫ, а не дату, и записать их в строку. Получать необходимо много раз, поэтому используется цикл while Делаю так: std::stringstream ss; while (true) { ss.clear(); ss << time(NULL); }Как-то так. Не кидайтесь особо тапками, я новичок.
C++ Проверить введённое пользователем число на соответствие условию Напишите программу, которая позволяет вводить данные, использует вложенный условный оператор, и выводит на экран 4 соответствующих сообщения. Введите с клавиатуры целое число N. Если оно парное , проверьте, положительное ли оно. Если непарное, проверить условие N<25. подробнее

Показать сообщение отдельно
hoggy
5230 / 2121 / 404
Регистрация: 15.11.2014
Сообщений: 4,812
Завершенные тесты: 1
02.01.2016, 20:41     Полная спецификация шаблона в перемешку с SFINAE
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
так код и писался, чтобы пофиксить это добавить возможность
Random<char> которую не подерживает uniform_int_distribution
и темболее Random<float> для которой надо uniform_real_distribution.
Ну вот горит желание предоставить функционал при это не "рассказывать" внутрености, что для float и Int разные поля, а для char вообще испобльзуйтеся int преобразованый в char.

понял. за справочку мерси.
я и не знал про его ограничение
(на самом деле не задумывался,
потому что по факту ничто кроме интов не требовалось)

есть предожение: я вам сейчас каркас сооружу.
а вы его до ума доведите
(а то я внезапно даже и не в курсе про всякие там char и float.
а оно вон оно как, над пофиксить сэмпл)

Добавлено через 36 минут
http://rextester.com/DDB41931

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <iostream>
 
#include <random>
#include <chrono>
 
#define dT \
    typename std::common_type<T1,T2>::type
 
namespace detailRandom{ 
 
    template<class T> struct property_
    {
        enum { eIS_BOOL = std::is_same<T, bool>::value }; 
        
        //TODO: как насчет wchar_t ???
        enum { eIS_CHAR 
            = std::is_same<T, char>::value 
           || std::is_same<T, unsigned char>::value 
           || std::is_same<T, signed char>::value 
        };
        
        enum { eIS_INTEGRAL = std::is_integral<T>::value && !eIS_CHAR && !eIS_BOOL };
        enum { eIS_FLOATING = std::is_floating_point<T>::value };
        enum { eIS_OTHER    = !eIS_CHAR && !eIS_INTEGRAL && !eIS_FLOATING };
    };
    
    template<class T>
    using for_integer 
        = typename std::enable_if< property_<T>::eIS_INTEGRAL >::type*;
    
    template<class T>
    using for_char 
        = typename std::enable_if< property_<T>::eIS_CHAR >::type*;
    
    template<class T>
    using for_bool
        = typename std::enable_if< property_<T>::eIS_BOOL >::type*;
    
    template<class T>
    using for_floating
        = typename std::enable_if< property_<T>::eIS_FLOATING >::type*;
    
    template<class T>
    using for_other
        = typename std::enable_if< property_<T>::eIS_OTHER >::type*;
    
 
    std::default_random_engine& rnd_()
    {
        static std::default_random_engine gen(
            static_cast<unsigned>(
                std::chrono::system_clock::now().time_since_epoch().count()
             )
        );
        return gen;
    }
    
    
 
} // namespace detailRandom
 
template<class T1, class T2, detailRandom::for_integer<dT> = nullptr> inline
dT random(const T1& a, const T2& b)
{
    std::uniform_int_distribution<dT> distribution(a, b);
    return distribution( detailRandom::rnd_());
}
 
template<class T1, class T2, detailRandom::for_floating<dT> = nullptr> inline
dT random(const T1& a, const T2& b)
{
    std::uniform_real_distribution<dT> distribution(a, b);
    return distribution( detailRandom::rnd_());
}
 
template<class T1, class T2, detailRandom::for_char<dT> = nullptr> inline
dT random(const T1& a, const T2& b)
{
    enum { eIS_SIGNED = std::is_signed<dT>::value };
    
    typedef typename std::conditional< eIS_SIGNED, int, unsigned >::type
        type;
    
    const auto a_ = static_cast<type>(a);
    const auto b_ = static_cast<type>(b);
    return static_cast<dT>(random( a_, b_));
}
 
 
template<class T1, class T2, detailRandom::for_bool<dT> = nullptr> inline
dT random(const T1& a, const T2& b)
{
    const auto a_ = static_cast<int>(a);
    const auto b_ = static_cast<int>(b);
    return static_cast<dT>(random( a_, b_));
}
#undef dT
 
 
int main()
{
    std::cout << "Hello, world!\n";
    
    std::cout << "integral: ";
    for(size_t n=0;n<10; ++n)
        std::cout << random(1,9)<<", ";
    std::cout << '\n';
    
    std::cout << "floating: ";
    for(size_t n=0;n<10; ++n)
        std::cout << random(1.0,9.0)<<", ";
    std::cout << '\n';
    
    std::cout << "char: ";
    for(size_t n=0;n<10; ++n)
        std::cout << random('a','g')<<", ";
    std::cout << '\n';
    
    std::cout << "bool: ";
    for(size_t n=0;n<10; ++n)
        std::cout << random(false, true)<<", ";
    std::cout << '\n';
    
}
 
Текущее время: 13:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru