本文整理汇总了C++中FunctionNode::addParameter方法的典型用法代码示例。如果您正苦于以下问题:C++ FunctionNode::addParameter方法的具体用法?C++ FunctionNode::addParameter怎么用?C++ FunctionNode::addParameter使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FunctionNode
的用法示例。
在下文中一共展示了FunctionNode::addParameter方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: makeFunctionNode
bool QsCodeParser::makeFunctionNode(const QString& synopsis,
QStringList *parentPathPtr,
FunctionNode **funcPtr)
{
QRegExp funcRegExp(
"\\s*([A-Za-z0-9_]+)\\.([A-Za-z0-9_]+)\\s*\\((" +
balancedParens +
")\\)(?:\\s*:\\s*([A-Za-z0-9_]+))?\\s*");
QRegExp paramRegExp(
"\\s*(\\[)?\\s*(?:([A-Za-z0-9_]+)\\s*:\\s*)?"
"([A-Za-z0-9_]+|\\.\\.\\.)\\s*(\\[)?[\\s\\]]*");
if (!funcRegExp.exactMatch(synopsis))
return false;
ClassNode *classe = (ClassNode*)
qsTre->findNode(QStringList(funcRegExp.cap(1)),Node::Class);
if (classe == 0)
return false;
FunctionNode *clone = new FunctionNode(0, funcRegExp.cap(2));
bool optional = false;
QString paramStr = funcRegExp.cap(3);
QStringList params = paramStr.split(",");
QStringList::ConstIterator p = params.begin();
while (p != params.end()) {
if (paramRegExp.exactMatch(*p)) {
if (!paramRegExp.cap(1).isEmpty())
optional = true;
clone->addParameter(Parameter(paramRegExp.cap(3),
"",
paramRegExp.cap(2),
optional ? "undefined" : ""));
if (!paramRegExp.cap(4).isEmpty())
optional = true;
}
else {
delete clone;
return false;
}
++p;
}
QString returnType = funcRegExp.cap(4);
if (!returnType.isEmpty())
clone->setReturnType(returnType);
if (parentPathPtr != 0)
*parentPathPtr = QStringList() << classe->name();
if (funcPtr != 0) {
*funcPtr = clone;
}
else {
delete clone;
}
return true;
}
示例2: quickifyFunction
void QsCodeParser::quickifyFunction(ClassNode *quickClass, ClassNode *qtClass,
FunctionNode *func, bool onBlackList)
{
if (func->metaness() == FunctionNode::Dtor)
return;
FunctionNode *kernelFunc = findKernelFunction(
QStringList() << quickClass->name(), func->name());
QString quickName = func->name();
if (func->metaness() == FunctionNode::Ctor)
quickName = quickClass->name();
FunctionNode *quickFunc = new FunctionNode(quickClass, quickName);
quickFunc->setLocation(func->location());
if (onBlackList) {
quickFunc->setAccess(Node::Protected);
}
else {
if (kernelFunc != 0 && func->numOverloads() == 1 &&
(func->parameters().count() == 0 ||
func->parameters().last().defaultValue().isEmpty())) {
kernelFunc->setAccess(Node::Private);
}
else {
if (func->metaness() == FunctionNode::Plain)
quickFunc->setAccess(Node::Protected);
}
}
quickFunc->setReturnType(cpp2qs.convertedDataType(qsTre,
func->returnType()));
if (func->metaness() != FunctionNode::Slot)
quickFunc->setMetaness(func->metaness());
quickFunc->setVirtualness(FunctionNode::ImpureVirtual);
quickFunc->setOverload(func->isOverload());
QList<Parameter>::ConstIterator q = func->parameters().begin();
while (q != func->parameters().end()) {
QString dataType = cpp2qs.convertedDataType(qsTre, (*q).leftType(),
(*q).rightType());
if (dataType.isEmpty()) {
dataType = "UNKNOWN";
quickFunc->setAccess(Node::Private);
}
Parameter param(dataType, "", (*q).name(),
(*q).defaultValue().isEmpty() ? "" : "undefined");
quickFunc->addParameter(param);
++q;
}
if (func->doc().isEmpty()) {
if (func->parent() != (InnerNode *) qtClass) {
func = qtClass->findFunctionNode(func);
if (func != 0)
setQtDoc(quickFunc, func->doc());
}
}
else {
setQtDoc(quickFunc, func->doc());
}
}