クラスのメンバ変数が静的かどうかを確認したいと思います。 std :: is_member_pointerを使用すると、参照メンバ以外のすべての型で正常に動作します。タイプ特性:参照メンバ変数が静的かどうかを確認してください
#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");
Iは、ポインタが基準部材を指し示すことができないこと、エラーを理解します。しかし、それを避けて、静的変数か非静的変数かを区別する方法はありますか?それについてのアイデア?
関連:http://stackoverflow.com/questions/8336274/pointer-to-member-that-is-a-reference-illegal – PiotrNycz