Ich möchte überprüfen, ob eine Elementvariable einer Klasse statisch ist oder nicht. Mit std :: is_member_pointer funktioniert für alle Typen mit Ausnahme von Referenzelementen.Typ Merkmal: Überprüfen Sie, ob Referenzelementvariable statisch ist oder nicht
#include <type_traits>
struct A {
int foo;
};
struct B : A {};
struct C {
static int foo;
};
struct D : C {
};
struct E {
int &foo;
};
struct F {
static int &foo;
};
static_assert(std::is_member_pointer<decltype(&A::foo)>::value, "No");
static_assert(std::is_member_pointer<decltype(&B::foo)>::value, "No");
static_assert(!std::is_member_pointer<decltype(&C::foo)>::value, "No");
static_assert(!std::is_member_pointer<decltype(&D::foo)>::value, "No");
// Fail to compile:
static_assert(std::is_member_pointer<decltype(&E::foo)>::value, "No");
static_assert(!std::is_member_pointer<decltype(&F::foo)>::value, "No");
Ich verstehe, den Fehler, dass ein Zeiger nicht auf ein Referenzelement zeigen kann. Aber wie kann man es vermeiden und trotzdem unterscheiden, ob es sich um eine statische oder nicht statische Variable handelt? Irgendeine Idee dazu?
Verbunden: http://stackoverflow.com/questions/8336274/pointer-to-member-that-is-a-reference-illegal – PiotrNycz