私は現在、ブーストフュージョン適応構造でデータメンバーのオフセットを計算しようとしていますが、そうするエレガントな方法があるかどうかはわかりません。次のようなことをしたいと思います。
#include <iostream>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/sequence/intrinsic/at.hpp>
#include <boost/fusion/include/at.hpp>
#include <cstddef.h>
struct test {
int a;
char c;
double b;
};
BOOST_FUSION_ADAPT_STRUCT(
test,
(int, a)
(char, c)
(double, b)
)
int main() {
test s{1, 2, 3.0};
// The following code doesn't work... I'm just trying to get my point across
std::cout << "offset is :" << offsetof(test, at<1>(s)) << std::endl;
}
ポイントは、offsetof 関数で明示的に 'a' または 'b' または 'c' を指定する必要がないことです。これ自体はそれほど有用ではありませんが、ブースト for_each ループで使用して、コンパイル時に構造体のすべてのデータ メンバーのオフセットを計算できるようにしたいと考えています。
何かアイデアがありましたら、ぜひお聞かせください。