Ist es möglich, "Typ der aktuellen struct
" innerhalb der struct
zu bekommen? Zum Beispiel möchte ich so etwas wie dies zu tun:Wie bekomme ich Informationen über den "aktuellen Typ" innerhalb einer Struktur/Klasse?
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;
}
}
Ich habe versucht, es so zu tun:
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;
}
}
aber es sieht hässlich, erfordert die Unterstützung der neuesten C++ Standard und MSVC connot kompilieren Sie es (es stürzt mit "einem internen Fehler" ab).
Eigentlich möchte ich nur einige Präprozessormakros schreiben automatisch generieren Funktionen wie 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);
}
Aber ich brauche „Stromart“ innerhalb des Makros kennen.
Warum nicht einfach das Makro GEN_COMPARE_FUNC machen (foobar, x, y) statt? – Rollie
@ForEveR über 'Variadic Macros'. Es wird von GCC und MSVC unterstützt, also ist es genug für mich. – qehgt
Wenn Sie einen bool-Operator in Form eines Templates == 'verwenden, können Sie versehentlich zwei Typen vergleichen, bei denen es nicht sinnvoll ist, dass sie vergleichbar sind. –