Imaginez que j'ai une fonction de modèle comme celui-ci:C++ - typedef "inside" arguments de modèle?
template<typename Iterator>
void myfunc(Iterator a, typename Iterator::value_type b)
{ ... }
est-il un moyen de mettre en œuvre la même chose en déclarer un typedef pour Iterator :: valuetype que je peux utiliser dans la signature de la fonction? Par exemple, je préfère être en mesure de faire quelque chose comme ceci:
template<
typename Iterator,
typedef Iterator::value_type type>
void myfunc(Iterator a, type b)
{ ... }
Jusqu'à présent, j'ai eu recours à l'aide d'arguments de modèle par défaut et Boost concept de vérification pour assurer la valeur par défaut est toujours utilisé:
template<
typename Iterator,
typename type = typename Iterator::value_type >
void myfunc(Iterator a, type b)
{
BOOST_STATIC_ASSERT((
boost::is_same<
typename Iterator::value_type,
type
>::value
));
...
}
... mais ce serait bien s'il y avait un support dans la langue pour ce genre de chose.
Modifier
Je devrais probablement avoir utilisé une classe au lieu d'une fonction, étant donné que les arguments par défaut ne sont pas standard pour les fonctions.
template<
typename T,
typename V = typename T::value_type>
class A : public B<T, V>
{
BOOST_STATIC_ASSERT((boost::is_same<typename T::value_Type, V>::type));
};
Remarque: les arguments de modèle par défaut sur les modèles de fonction sont une extension. Ils ne sont pas en C++ 03. –
J'ai également réparé votre autre lieu d'omission de type. J'espère que cela ne vous dérange pas. –