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
| #include <iostream>
#include <string>
#include <algorithm>
#include <functional>
template< char caracter >
struct IsCaracter
{
bool operator() ( char c )const{ return c == caracter; }
};
struct IsCaracterNonTpl
{
template< char caracter >
static bool IsCaracter( char c ){ return c == caracter; }
};
struct IsCaracterState
{
IsCaracterState(char c):caracter(c){}
bool operator() ( char c )const{ return c == caracter; }
const char caracter;
};
struct IsCaracterTplop
{
template<char caracter>
bool operator() ( char c )const{ return c == caracter; }
};
struct IsCaracterBase
{
virtual bool operator() ( char c )const=0;
};
template<char caracter>
struct IsCaracterDerive : IsCaracterBase
{
virtual bool operator() ( char c )const{ return c == caracter; }
};
//template< char caracter >
//struct IsCaracterError
//{
// static bool operator() ( char c ); //interdit : l'opérateur () ne peut être statique - pas de rapport avec générique
//};
//
//struct IsCaracterNonTplError
//{
// template< char caracter >
// static bool IsCaracter( char c );//interdit : l'opérateur () ne peut être statique - pas de rapport avec générique
//};
//
//struct IsCaracterStateError
//{
// static bool operator() ( char c )//interdit : l'opérateur () ne peut être statique - pas de rapport avec générique
//
// static const char caracter = 'x';
//};
template<char caracter>
bool IsCaracterFn(char c)
{
return c==caracter;
}
bool IsCaracterFn(char caracter, char c)
{
return c==caracter;
}
int main()
{
std::string s("azerty1234567890");
s.erase(std::remove_if(s.begin(), s.end(), IsCaracter<'a'>()), s.end());
s.erase(std::remove_if(s.begin(), s.end(), IsCaracterNonTpl::IsCaracter<'z'>), s.end());
s.erase(std::remove_if(s.begin(), s.end(), IsCaracterFn<'e'>), s.end());
s.erase(std::remove_if(s.begin(), s.end(), std::bind1st(std::ptr_fun(IsCaracterFn),'r')), s.end());
s.erase(std::remove_if(s.begin(), s.end(), IsCaracterState('t')), s.end());
s.erase(std::remove_if(s.begin(), s.end(), std::bind1st(std::mem_fun_ref(&IsCaracterTplop::operator()<'y'>),IsCaracterTplop())), s.end());
std::cout<<s<<"\n";
return 0;
} |
Partager