namespace std::meta {
consteval member_offset offset_of(info r);
}
概要
メンバ変数や基底クラスのオフセットを取得する。
以下のいずれかを表すリフレクションを受け取れる:
- メンバ変数
- 無名ビットフィールド
- 直接基底クラス関係(仮想基底クラスかつ派生クラスが抽象クラスである組み合わせは除く)
戻り値
rが上記のいずれかを表す場合、所属するクラスの先頭からのオフセットをmember_offsetとして返す。
例外
rが上記のいずれも表さない場合、std::meta::exception例外を送出する。
例
#include <meta>
#include <print>
struct S {
char a;
int b;
double c;
};
int main() {
std::println("sizeof(S) = {}", sizeof(S));
template for (constexpr auto m :
std::define_static_array(std::meta::nonstatic_data_members_of(
^^S, std::meta::access_context::unchecked()))) {
constexpr auto off = std::meta::offset_of(m);
std::println("{}: offset = {} bytes, size = {}",
std::meta::identifier_of(m),
off.bytes,
std::meta::size_of(m));
}
}
出力例
sizeof(S) = 16
a: offset = 0 bytes, size = 1
b: offset = 4 bytes, size = 4
c: offset = 8 bytes, size = 8
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: 16 (
-freflectionオプション指定) ✅ - Visual C++: ??