#include <iostream>
#include <string>
#include <vector>
template <typename T>
class IsBigger
{
public:
IsBigger(const T parametr) : skladnik(parametr){std::cout << "Constr";}
~IsBigger(){std::cout << "Destr";}
bool operator()(T liczba){return liczba > skladnik;}
private:
T skladnik;
};
template <typename T, typename P>
int count(const T & v, P predicate)
{
int total{0};
for (const auto & x : v) if (predicate(x)) total++;
return total;
};
int main()
{
std::vector<int> wek;
for (int i=0;i<20;i++) wek.push_back(i);
std::cout << count(wek, IsBigger<int>(7)) << std::endl;
std::string tablica[8]{"abba", "babba", "cabba", "dabba", "dbba", "eghs"};
std::cout << count(tablica, IsBigger<std::string>("cabb"));
}
Program wypisuje:
ConstrDestr12
DestrConstrDestr4
Dlaczego w drugiej linii wypisuje drugi destruktor? Tyko, proszę, łopatologicznie, to może coś zrozumiem.