7

私は現在、ブーストフュージョン適応構造でデータメンバーのオフセットを計算しようとしていますが、そうするエレガントな方法があるかどうかはわかりません。次のようなことをしたいと思います。

#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 ループで使用して、コンパイル時に構造体のすべてのデータ メンバーのオフセットを計算できるようにしたいと考えています。

何かアイデアがありましたら、ぜひお聞かせください。

4

1 に答える 1