我正在使用Facebook的libgraphqlparser库与C++中的GraphQL AST进行交互。我正在尝试使用以下代码来确定type的特定FieldDefinition,它可以是ListTypeNamedType等:

bool isListType (FieldDefinition * fieldDef) {
  if (ListType* lt = dynamic_cast<ListType*>(fieldDef->getType())) {
    return true;
  }
  return false;
}

但是,fieldDef上存在以下错误:
the operand of a pointer dynamic_cast must be a pointer to a complete class type

还有另一种方法来测试getType返回的特定类吗?

最佳答案

您可以定义一个覆盖AstVisitorvisitNamedTypevisitListTypevisitNonNullType子类,并记录这三个方法中的哪个首先被调用以进行类型检查。 (请参阅AstVisitor.h。)请注意ListTypeNonNullType包含其他类型!您也可以将访问各种类型的逻辑正确地放在访问者中,如果可能的话,这可能会更加方便。

09-28 10:21