estoy tratando de escribir operador booleano conversión para std :: bitsetsobrecarga de conversión no miembros a bool operador
Traté:
template<size_t size>
operator bool(std::bitset<size> & b)
{
return b.any();
}
pero tengo
error C2801: 'mynamespace::operator bool' must be a non-static member
de mi visual-studio.
Pero cuando miro hacia arriba C2801 explanation no dice nada sobre los operadores de conversión (sólo alrededor =, ->, [],())
Por lo tanto, es posible la escritura de alguna manera "std :: Conversión bitset a bool ¿operador?"
(no puedo llamar a mi b.any()
en las sentencias if, debido a que el mismo código debe ejecutarse cuando std :: bitset se reemplaza con sin firmar o algo
typedef std::bitset<x> Bitset;
//typedef unsigned Bitset;
lo que la sintaxis ideal será como:
Bitset b = whatewer;
if(b)
doStuff();
)
Si esta sobrecarga no es posible, ¿cuál es la solución recomendada?
hasta ahora lo uso como:
if(b == Bitset(0))
doStuff();
pero no me gusta él.
Gracias
Esta es una pregunta interesante. No conozco ninguna forma directa de hacer lo que sugieres. Puede que no exista uno. Como saben, el problema es que ni el tipo convertido ni el tipo convertido es definido por el usuario. El compilador no quiere permitirle agregar nuevas conversiones de implícita entre tipos que no creó. Puede que tenga que definir y llamar explícitamente su propia función * make_bool(). * Al menos si * en línea * su función, debe ser tan eficiente en tiempo de ejecución como una conversión incorporada; pero no obtendrás una conversión implícita, ¿o sí? – thb