OVH Cloud OVH Cloud

IS_INSIDE générique ?

5 réponses
Avatar
Stephane Wirtel
Bonjour à tous,

Est-ce que quelqu'un a déjà pensé à pondre une fonction template,
permettant de vérifier qu'une valeur se trouve dans une intervalle ?

Style:

template< typename T, class LOWER_BOUND, class UPPER_BOUND >
bool IsInside( const T & data, const T & lowerBound, const T & upperBound ) {
return( LOWER_BOUND( data ) && UPPER_BOUND( data ) );
}

Quelqu'un aurait-il une autre idée ?

Merci d'avance,

Stef

5 réponses

Avatar
Michel Decima
In news:e15bu9$uf4$,
Stephane Wirtel typed:
Bonjour à tous,

Est-ce que quelqu'un a déjà pensé à pondre une fonction template,
permettant de vérifier qu'une valeur se trouve dans une intervalle ?

Style:

template< typename T, class LOWER_BOUND, class UPPER_BOUND >
bool IsInside( const T & data, const T & lowerBound, const T &
upperBound ) { return( LOWER_BOUND( data ) && UPPER_BOUND( data ) );
}


Les parametres lowerBound et upperBound ne sont pas utilises ?

Avatar
Stephane Wirtel
Michel Decima said the following on 7/04/2006 12:26:
In news:e15bu9$uf4$,
Stephane Wirtel typed:
Bonjour à tous,

Est-ce que quelqu'un a déjà pensé à pondre une fonction template,
permettant de vérifier qu'une valeur se trouve dans une intervalle ?

Style:

template< typename T, class LOWER_BOUND, class UPPER_BOUND >
bool IsInside( const T & data, const T & lowerBound, const T &
upperBound ) { return( LOWER_BOUND( data ) && UPPER_BOUND( data ) );
}


Les parametres lowerBound et upperBound ne sont pas utilises ?
Oui c'est un oubli, mais je pense que tout le monde avait compris l'idée


Voici la modif


template<
typename T,
template< typename T > class LOWERBOUND,
template< typename T > class UPPERBOUND >
bool IsInside(const T &data, const T & lowerBound, const T & upperBound) {
LOWERBOUND<T> lower;
UPPERBOUND<T> upper;

return(lower( lowerBound, data ) && upper( data, upperBound ));
}


Avatar
John Deuf
Stephane Wirtel :

Est-ce que quelqu'un a déjà pensé à pondre une fonction template,
permettant de vérifier qu'une valeur se trouve dans une intervalle ?


A la compilation ou a l'execution ?
A la compilation, tu peux utiliser static assert de boost.

--
John Deuf

Avatar
Stephane Wirtel
John Deuf wrote:
Stephane Wirtel :

Est-ce que quelqu'un a déjà pensé à pondre une fonction template,
permettant de vérifier qu'une valeur se trouve dans une intervalle ?


A la compilation ou a l'execution ?
A la compilation, tu peux utiliser static assert de boost.

A l'exécution bien entendu :p



Avatar
Vincent Lascaux
template<
typename T,
template< typename T > class LOWERBOUND,
template< typename T > class UPPERBOUND >
bool IsInside(const T &data, const T & lowerBound, const T & upperBound) {
LOWERBOUND<T> lower;
UPPERBOUND<T> upper;

return(lower( lowerBound, data ) && upper( data, upperBound ));
}


Pour quel genre de données upper(data, upperBound) n'est pas pareil que
lower(upperBound, data) ?
Je vois bien l'interet de faire un truc géneric, mais bon, faut pas exagerer
non plus :)

D'autre part, quel est l'interet de cette version par rapport à par exemple

template<
typename T,
template< typename T > class LOWERBOUND,
template< typename T > class UPPERBOUND >
bool IsInside(const T &data, const T & lowerBound, const T & upperBound) {
return LOWERBOUND<T>::comp(lowerBound, data) &&
UPPERBOUND<T>::comp(data, upperBound);
}

Ma version ca serait plutot (si ca compile, sinon le lecteur corrigera la
faute évidente par lui même)

template<typename T, typename Less = std::less<typename T> >
bool IsInside(const T& data, const T& lowerBound, const T& upperBound, Less
less = Less())
{
return less(lowerBound, data) && less(data, upperBound);
}

--
Vincent