CLANG:如何获取类中的静态数据成员的init值

时间:2019-02-22 01:54:19

标签: clang clang++

将具有静态constexpr的类赋予const char *:

结构S {   静态constexpr const char * str =“ 123”;   ... };

在使用lang AST进行解析时,我能否通过GetInClassInitializer()从FieldDecl类中获取字符串expr“ 123”?我想我会得到某种指针,但是那会指向带有“ 123”的区域吗?如果不是,应该使用什么正确的clang API调用来获取值?谢谢!

1 个答案:

答案 0 :(得分:0)

我想我在数据成员def中使用“ const”的想法太多了。我担心在解析期间字符串“ 123”可能不可用。事实证明它是可用的,访问非常简单。假设“ d”指向“ str”以上的成员def,则返回初始化字符串的函数片段可以如下:

...
if ( VarDecl *vard = dyn_cast<VarDecl>(d) ) {
   if ( vard->isStaticDataMember() ) {
       Expr *expr = vard->getInit();
       Expr *constExpr = expr->IgnoreImpCasts();
       if ( StringLiteral *str = dyn_cast<StringLiteral>(constExpr) )
          return str->getString().str();
   }
}