¿Es posible obtener "tipo de la actual struct
" dentro de struct
? Por ejemplo, quiero hacer algo como esto:¿Cómo obtener información sobre el "tipo actual" dentro de una estructura/clase?
struct foobar {
int x, y;
bool operator==(const THIS_TYPE& other) const /* What should I put here instead of THIS_TYPE? */
{
return x==other.x && y==other.y;
}
}
Traté de hacerlo de esta manera:
struct foobar {
int x, y;
template<typename T>
bool operator==(const T& t) const
{
decltype (*this)& other = t; /* We can use `this` here, so we can get "current type"*/
return x==other.x && y==other.y;
}
}
pero se ve feo, requiere el apoyo de la última C++ estándar, y connot MSVC compilarlo (se bloquea con "un error interno").
En realidad, sólo quiero escribir algunas macros del preprocesador para generar automáticamente funciones como operator==
:
struct foobar {
int x, y;
GEN_COMPARE_FUNC(x, y);
}
struct some_info {
double len;
double age;
int rank;
GEN_COMPARE_FUNC(len, age, rank);
}
Pero necesito saber "tipo actual" dentro de la macro.
¿Por qué no hacer que su macro GEN_COMPARE_FUNC (foobar, x, y) en su lugar? – Rollie
@ForEveR a través de 'Variadas macros'. Es compatible con GCC y MSVC, por lo que es suficiente para mí. – qehgt
Al utilizar un operador de bool con plantilla == ', puede hacer accidentalmente la posibilidad de comparar dos tipos en los que no tiene sentido que sean comparables. –