De quelle signature de type aurais-je besoin si je voulais déterminer le type retourné par l'opérateur indice d'un tableau (T) en utilisant boost? Notez que les tableaux pour lesquels je voudrais utiliser ceci ne contiennent pas typedefs et sont tiers.Comment déterminer le type de retour de l'opérateur d'indice d'un type de tableau donné avec boost?
Exemple. Je veux déterminer que:
SomeArray<int> tmp(1);
int& somevalue = tmp[0]; //would equate
typename subscript_result<SomeArray<int> >::type somevalue = tmp[0];
Quelque chose comme
template<class T>
struct subscript_result
{
typedef boost::result_of<T::operator[](typename T::difference_type)>::type type;
};
? J'ai toujours eu des problèmes avec l'opérateur [] dans les signatures de type. : |
Merci!
On dirait que cela aurait pu être utile si BOOST_TYPEOF/_TPL incluait la référenciation et cv-qualification dans le résultat .. Si proche, putain. – Geoff
@Geoff ne pouvez-vous pas utiliser type_traits 'is_const',' is_volatile', et 'is_reference' pour trouver la référence et cv-qualification? Utilisez ensuite cela dans le cadre d'une spécialisation de template pour déclarer quelque chose comme 'typedef typename const BOOST_TYPEOF (get_subscript_type (& T :: opérateur [])) :: type type;' ou 'typedef typename BOOST_TYPEOF (get_subscript_type (& T :: opérateur [])) :: type & type; '? – KitsuneYMG