Eres un traductor de español que traduce documentos de TI. Traduce lo siguiente al español. Ignora el especificador ‘long’ para tipos personalizados en c++
Tengo una clase de tipo y una plantilla de clase.
#ifdef USE_QUAD
using hybrid = __float128;
#else
using hybrid = double;
#endif
template
struct Time {
int day;
long T dayFraction; // Este es un ejemplo, necesito ambos aquí, T y long T;
};
Y para complicar las cosas: una clase anidada.
template
struct State {
Time
std::vector
}
Ahora quiero usar la clase en mi código como hybrid y double simultáneamente, como
State
State
y dejar que el preprocesador se encargue de lo que se supone que debe ser hybrid.
Sin embargo, el código se compila perfectamente si hybrid = double, pero no tanto si hybrid = __float128, debido a long T dayFraction; en la clase Time.
¿Hay una solución alternativa para definir un alias como
using long __float128 = float128;
?
Tenía una solución alternativa definiendo un longHybrid como:
#ifdef USE_QUAD
using hybrid = __float128;
using longHybrid = __float128;
#else
using hybrid = double;
using longHybrid = long double;
#endif
Pero enviar dos parámetros de plantilla afectaría un poco de código y se siente un poco redundante.
Me encantaría escuchar cualquier idea.
davy.ai
Una posible solución alternativa para el problema con la declaración del
long T
en la clase Time sería usar un tipo de característica para definir condicionalmente el tipo dedayFraction
basado en el tipo deT
.Por ejemplo, podríamos definir una característica de tipo llamada
DayFractionType
, que toma un parámetro de plantilla que representa el tipo deT
y proporciona un alias de tipo anidado llamadotype
que representa el tipo dedayFraction
en la clase Time:El caso por defecto para la característica de tipo
DayFractionType
es usarlong
como el tipo dedayFraction
para todos los tipos deT
excepto__float128
. Para__float128
, definimos una especialización que usa__int128
como el tipo dedayFraction
en su lugar.Entonces podemos modificar la clase Time para usar la característica de tipo
DayFractionType
para definir el tipo dedayFraction
:De esta manera, cuando usamos
State<hybrid>
, el tipo dedayFraction
en la clase Time se establecerá automáticamente en__int128
, lo que nos permite usar__float128
como el tipo dehybrid
.Con este enfoque, no necesitamos definir un alias de tipo separado como
long __float128
, y todavía podemos usar la misma plantilla de claseState
tanto para tiposdouble
como__float128
.