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

Сделать так, чтобы предикат работал тоже шаблонно, в зависимости от типа значений, хранимых ей - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как перегрузить оператор для своего класса? http://www.cyberforum.ru/cpp-beginners/thread1234315.html
У меня есть класс, .h class Vertex { public: ~Vertex(); Vertex(); double GetX(); double GetY(); double GetZ(); void SetX(double x);
C++ Какую лучше всего в наше время использовать графическую библиотеку? Какую лучше всего в наше время использовать графическую библиотеку? в VS 2012, слышал об SFML, и Openg. Какую современную и легкую для понимания посоветуете. http://www.cyberforum.ru/cpp-beginners/thread1234292.html
C++ Открыть файл по заданному пути
Нужно, чтобы открывался файл, который, например, находится в C:\TEST#1 Подскажите, пожалуйста, как это сделать?
Можно ли передать указатель на функцию как параметр другой функции? C++
В общем, вопрос. Можно ли, допустим ... int fun1(int x) { ... ... ... return x*1000; }
C++ Создание полиморфного объекта, зачем создавать указатель на объект базового класса? http://www.cyberforum.ru/cpp-beginners/thread1233965.html
Зачем создавать указатель на объект базового класса: Base *A = new Derived Если можно сделать так: Derived *A = new Derived
C++ Реализовать круговые движения курсором мыши Я новичек в с++. Хочу написать простую программу, которая при нажатии на кнопку (которую задам я в программе) мышь начинала делать круговые движения (что-то типа цикла). Можете подсказать функцию, с... подробнее

Показать сообщение отдельно
Vlad0922
29 / 23 / 4
Регистрация: 20.11.2013
Сообщений: 65

Сделать так, чтобы предикат работал тоже шаблонно, в зависимости от типа значений, хранимых ей - C++

26.07.2014, 12:09. Просмотров 258. Ответов 3
Метки (Все метки)

Здравствуйте!

Имеется некий предикат, например:
C++
1
2
3
bool isInteger (double value){
    return static_cast<int>(value)==value;
}
С помощью него хочу посчитать кол-во элементов, удовлетворяющих предикату:
C++
1
2
3
4
5
6
7
8
9
10
11
template<typename T>
unsigned count(const T &collection, bool (*func)(double)){
    int counter=0;
 
 
for(typename T::const_iterator it = collection.begin(); it != collection.end();it++)
    if (func(*it))
        counter++;
 
    return counter;
}
При частичной специализации шаблона предиката (в данном случае типом double), все работает отлично.

C++
1
2
3
4
5
6
 std::vector<double> vec;
    
 for(int i=0;i<10;++i)
 vec.push_back(static_cast<double>(i)/2);
    
std::cout << count(vec,isInteger);
Но. Заранее мне неизвестно какой тип будет храниться в коллекции и хочу сделать так, чтобы предикат работал тоже шаблонно, в зависимости от типа значений, хранимых ей.

Подскажите, как это сделать?
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru