¿Cuáles son buenos casos de uso para usar tuplas en C++ 11? Por ejemplo, tengo una función que define una estructura local de la siguiente manera:¿Cuáles son los buenos casos de uso para las tuplas en C++ 11?
template<typename T, typename CmpF, typename LessF>
void mwquicksort(T *pT, int nitem, const int M, CmpF cmp, LessF less)
{
struct SI
{
int l, r, w;
SI() {}
SI(int _l, int _r, int _w) : l(_l), r(_r), w(_w) {}
} stack[40];
// etc
estaba considerando para reemplazar la estructura SI
con un std::tuple<int,int,int>
, que es una declaración mucho más corto con los constructores convenientes y operadores ya predefinidos, pero con las siguientes desventajas:
- Los elementos Tuple están ocultos en estructuras oscuras, definidas por la implementación. Aunque Visual Studio interpreta y muestra sus contenidos muy bien, todavía no puedo poner puntos de interrupción condicionales que dependen del valor de los elementos de tupla.
- Acceder a campos de tuplas individuales (
get<0>(some_tuple)
) es mucho más detallado que acceder a elementos de estructura (s.l
). - Acceder a los campos por nombre es mucho más informativo (¡y más corto!) Que por índice numérico.
La función tie
se ocupa de los dos últimos puntos. Dadas estas desventajas, ¿cuál sería un buen caso de uso para las tuplas?
ACTUALIZACIÓN Resulta que VS2010 SP1 depurador no puede mostrar el contenido de la siguiente matriz std::tuple<int, int, int> stack[40]
, pero funciona bien cuando se codifica con una estructura. Entonces, la decisión es básicamente obvia: si alguna vez tiene que inspeccionar sus valores, use una estructura [esp. importante con depuradores como GDB].
el problema de indexación puede resolverse con conste/enums definidos apropiados. – KillianDS
¿Escribió una función de clasificación que toma 'T *, size'? lolwot, ¿por qué alguna vez harías tal cosa? – Puppy
@DeadMG Solo para que pueda darle algo de material para trolling. – zvrba