Форум программистов, компьютерный форум 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
28 / 22 / 4
Регистрация: 20.11.2013
Сообщений: 65
26.07.2014, 12:09     Сделать так, чтобы предикат работал тоже шаблонно, в зависимости от типа значений, хранимых ей
Здравствуйте!

Имеется некий предикат, например:
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);
Но. Заранее мне неизвестно какой тип будет храниться в коллекции и хочу сделать так, чтобы предикат работал тоже шаблонно, в зависимости от типа значений, хранимых ей.

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