本文整理汇总了C++中ExpressionPtr::Type方法的典型用法代码示例。如果您正苦于以下问题:C++ ExpressionPtr::Type方法的具体用法?C++ ExpressionPtr::Type怎么用?C++ ExpressionPtr::Type使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ExpressionPtr
的用法示例。
在下文中一共展示了ExpressionPtr::Type方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Validate
bool ArgDef::Validate(ExpressionEvaluator evaluator, ExpressionPtr &expr, string &error) const {
if (expr) {
if (auto sexp = TypeHelper::GetValue<Sexp>(expr)) {
auto &args = sexp->Args;
if (!args.empty()) {
ExpressionPtr fnExpr = move(args.front());
args.pop_front();
if (auto fn = TypeHelper::GetValue<Function>(fnExpr)) {
bool result = ValidateArgs(evaluator, args, error);
args.push_front(move(fnExpr));
return result;
}
else
throw invalid_argument("first argument in sexp must be a function");
}
else
throw invalid_argument("sexp requires at least one argument");
}
else
error = "Expected: Sexp. Actual: " + expr->Type().Name();
}
else
throw invalid_argument("ExpressionPtr is empty");
return error.empty();
}
示例2: CheckArg
bool ArgDef::CheckArg(ExpressionEvaluator evaluator, ExpressionPtr &arg, const TypeInfo &expectedType, size_t argNum, string &error) const {
if (arg && TypeHelper::TypeMatches(expectedType, arg->Type()) || evaluator(arg)) {
if (&expectedType == &Literal::TypeInstance && &arg->Type() == &Quote::TypeInstance) {
return true;
}
if (!TypeHelper::TypeMatches(expectedType, arg->Type())) {
error = "Argument " + to_string(argNum) + ": Expected " + expectedType.Name() + ", got " + arg->Type().Name();
return false;
}
else
return true;
}
else {
error = "Argument " + to_string(argNum) + ": Failed to evaluate";
return false;
}
}
示例3: IsAtom
bool TypeHelper::IsAtom(const ExpressionPtr &expr) {
return IsAtom(expr->Type());
}