Dans une classe, j'ai deux méthodes différentes qui devraient être mutuellement exclusives en fonction du paramètre de modèle d'appelant.C++ 03: Méthodes mutuellement exclusives grâce à enable_if
class Foo
{
// For collections
template<class T>
typename boost::enable_if<boost::is_same<typename std::vector<typename T::value_type>, T>::value, const T&>::type
doSomething()
{ }
// For single types
template<class T>
typename boost::enable_if<!boost::is_same<typename std::vector<typename T::value_type>, T>::value, const T&>::type
doSomething()
{ }
}
Ceci ne sera pas compilé.
error: type/value mismatch at argument 1 in template parameter list for 'template struct boost::enable_if' error: expected a type, got '! boost::is_same::value'
Peut-être voulez-vous 'boost :: enable_if_c'? Voir par exemple [la référence Boost enable_if] (http://www.boost.org/doc/libs/1_64_0/libs/core/doc/html/core/enable_if.html). –
pourquoi ne pas utiliser 'disable_if' – danielspaniol
étrange, pourquoi spécifiez-vous' const T & 'avant' doSomething() ', car le type de retour aurait déjà été spécifié par' typename boost :: enable_if ... '? – Alexey