Question: Question:
I am considering how to write general-purpose processing in C ++ for the code implemented in C language (unchangeable).
For example, if the C side has the following structure definition,
typedef struct
{
int nvalue;
float fvalue;
} Test_t;
Is there a way to implement the following Create_strucure / Get_member in C ++?
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)を返却
The purpose is to write a universally usable process for a huge number of sturucts.
I think it would be easier if the struct / member reference could be done as a string, but is that possible?
Thank you.
Answer: Answer:
If the immutable implemented code is provided as a compiled library and Test_t is also provided as an opaque type, it is not possible because the information is lost.
If you have a header file but you can't change it, the principle is to analyze the header with clang -Xclang -ast-dump=json
in advance, dump the AST to a file, and read it from JSON at runtime. I think it is possible.
There was a tool & library that actually did the same thing with Clang libtooling.
https://github.com/mlomb/MetaCPP
The comment "I want to get GetComponent in C ++!" Seems to be a similar story in Visual Studio.