Supposons que j'ai un modèle de fonction comme ceci:Le fait de contraindre la classe de modèle avec l'opérateur T * en passant comme argument T * d'un modèle de fonction
template<class T>
inline
void
doStuff(T* arr)
{
// stuff that needs to use sizeof(T)
}
Puis dans un autre .h
FILEE J'ai une classe de modèle Foo
qui a:
public: operator T*() const;
Maintenant, je réalise que ce sont des Ts différents. Mais si j'ai une variable Foo<Bar> f
sur la pile, la seule façon de le contraindre à n'importe quel type de pointeur serait d'appeler operator T*()
. Pourtant, si appelez doStuff(f)
, GCC se plaint que doStuff
ne peut pas prendre Foo<Bar>
au lieu d'utiliser automatiquement l'opérateur T*()
pour contraindre à Bar*
, puis en spécialisant le modèle de fonction avec Bar
comme T
.
Y at-il quelque chose que je peux faire pour que cela fonctionne avec deux modèles? Ou bien l'argument de la fonction template doit-il être un vrai type de pointeur ou bien la classe template avec l'opérateur de coercition doit-elle être passée à une fonction non-template?
Le déréférencement d'une référence est en général un mauvais style. Je sais que les hacks ont leur valeur, mais seulement utilisé avec parcimonie. –
En outre, il est simplement incorrect. Syntaxiquement parce que vous n'avez pas défini T nulle part, sémantiquement car Foo .operator &() ne retournera pas un T * mais un Foo *. –