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

Объявить аргументы по шаблону - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Реализация шифра перестановки для заданного ключа http://www.cyberforum.ru/cpp-beginners/thread964464.html
Напишите пожалуйста код на С++ реализации шифра перестановки для заданного ключа.
C++ Посчитать количество строк и слов в с++ Задание:Вводим несколько строк.Нужно посчитать количество строк и слов. Спасите меня))если можно,то с разъяснением http://www.cyberforum.ru/cpp-beginners/thread964460.html
C++ Передача файла в функцию в качестве параметра
Здравствуйте! Подскажите, как передать файловый поток в функцию? int main() { ifstream fin("my file.txt"); ... }
C++ функция изменяет старший байт числа на заданное значение не изменяя младший байт
функция изменяет старший байт числа на заданное значение не изменяя младший байт. как можно проще
C++ для заданной числовой последовательности 2n*5n! вычислить максимальный элемент и его номер http://www.cyberforum.ru/cpp-beginners/thread964440.html
Нужно написать программу если не сложно, или хотя бы разработать алгоритм, который для заданной числовой последовательности 2n*5n! вычисляет максимальный элемент и его номер с клавиатуры вводит только n
C++ Гибкая архитектура и порождающие паттерны У меня возник вопрос следующего характера. Предположим, что есть некоторый интерфейсный класс фильтра, есть реализации, наследованные от него, есть класс - контейнер, который умеет регистрировать в себе фильтры и последовательно их применять и вычислять конечный результат по логическому или. И есть класс - кусок MVC паттерна проектирования, который зарегестрированный контейнер с фильтрами уже... подробнее

Показать сообщение отдельно
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
28.09.2013, 22:46     Объявить аргументы по шаблону
мой вариант, но я не сильно tuple'ы бачу, так что

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
#include <tuple>                                                           
#include <cstdlib>                                                         
#include <type_traits>                                                     
#include <iostream>                                                        
#include <stdexcept>                                                       
                                                                           
void check (const int t) {                                                 
    if (t > 3) throw std::logic_error("smth bad");                         
}                                                                          
                                                                           
void check (bool value) {                                                  
                                                                           
}                                                                          
                                                                           
template <typename _tuple, size_t index>                                   
struct operate_tuple_element {                                             
    static void operate (const _tuple& t) {                                
        check ( std::get<index - 1> (t) );                                 
        operate_tuple_element<_tuple, index - 1>::operate (t);             
    }                                                                      
};                                                                         
                                                                           
template <typename _tuple>                                                 
struct operate_tuple_element<_tuple, 0> {                                  
    static void operate (const _tuple& t) {                                
        check ( std::get<0>(t) );                                          
    }                                                                      
};                                                                         
                                                                           
template <typename F>                                                      
class FWrapper {                                                           
public:                                                                    
    FWrapper (F& f) : f(f) { }                                             
    template<typename... Args>                                             
    typename std::result_of<F(Args...)>::type operator () (Args... args) { 
        operate_tuple_element<std::tuple<Args...>, sizeof...(Args)>        
                ::operate (std::make_tuple(args...));                      
        return f(args...);                                                 
    }                                                                      
private:                                                                   
    F f;                                                                   
};                                                                         
                                                                           
template <typename F>                                                      
FWrapper<F> create_wrapper (F f){                                          
    return FWrapper<F> (f);                                                
}                                                                          
                                                                           
int my_fun (int a, bool b, int c) {                                        
    return b ? a : c;                                                      
}                                                                          
                                                                           
int main () {                                                              
    auto wrapper = create_wrapper (my_fun);                                
    std::cout << wrapper(1, true, 2) << std::endl;                         
}
 
Текущее время: 03:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru