structのメンバを文字列で指定して参照したい


C言語で実装済みのコード(変更不可)に対し、C++で汎用的な処理を書く方法を検討しています。

たとえばC側に下記のような構造体定義があった場合に、

[code]

    typedef struct
    {
        int     nvalue;
        float   fvalue;
    } Test_t;
    
[/code]

C++で下記のCreate_strucure/Get_memberを実現する方法はありますでしょうか。

[code]

    auto sparam = Create_structure("Test_t");
    auto* pvalue_1 = Get_member(&sparam, "nvalue");
    *pvalue_1 = 1;
    auto* pvalue_2 = Get_member(&sparam, "fvalue");
    *pvalue_2 = 2.3;
    
    //Create_strucure : 文字列で指定されたstruct型を返却
    //Get_member：引数1で指定された変数のメンバ(引数1.引数2)を返却
    
[/code]

目的は、膨大な数のstuructに対して汎用的に使用可能な処理を書くことです。  
struct/member参照を文字列で行うことができれば楽だと思うのですが、そういったことは可能でしょうか。

よろしくお願いいたします。




変更不可の実装済みのコードがコンパイル済みライブラリとして提供されていて、Test_tも不透明型として提供されている場合は、情報が失われているので不可能です。

ヘッダーファイルはあるけれど変更はできないという状況でしたら、事前に`clang -Xclang -ast-
dump=json`でヘッダーを解析しASTをファイルにダンプしておいて、実行時にJSONから読みだして引き当てることは原理的には可能だと思います。

実際に Clang libtooling で同様のことをやっているツール＆ライブラリがありました。  
<https://github.com/mlomb/MetaCPP>

コメントにある「C++でもGetComponentがしたい！」もVisualStudioでの似たような話のようです。




変更不可の実装済みのコードがコンパイル済みライブラリとして提供されていて、Test_tも不透明型として提供されている場合は、情報が失われているので不可能です。

ヘッダーファイルはあるけれど変更はできないという状況でしたら、事前に`clang -Xclang -ast-
dump=json`でヘッダーを解析しASTをファイルにダンプしておいて、実行時にJSONから読みだして引き当てることは原理的には可能だと思います。

実際に Clang libtooling で同様のことをやっているツール＆ライブラリがありました。  
<https://github.com/mlomb/MetaCPP>

コメントにある「C++でもGetComponentがしたい！」もVisualStudioでの似たような話のようです。

