string Slice::classDefToDelegateString(const ClassDefPtr& cl, int typeCtx, bool cpp11) { assert(cl->isDelegate()); // A delegate only has one operation OperationPtr op = cl->allOperations().front(); TypePtr ret = op->returnType(); string retS = returnTypeToString(ret, op->returnIsOptional(), op->getMetaData(), typeCtx, cpp11); string t = "::std::function<" + retS + " ("; if(cpp11) { // inputTypeToString usually passes local operation values by // reference. This is not the desired behavior for delegates typeCtx &= ~TypeContextLocalOperation; typeCtx |= TypeContextDelegate; } ParamDeclList paramList = cl->allOperations().front()->parameters(); for(ParamDeclList::iterator q = paramList.begin(); q != paramList.end(); ++q) { if((*q)->isOutParam()) { t += outputTypeToString((*q)->type(), (*q)->optional(), (*q)->getMetaData(), typeCtx, cpp11); } else { t += inputTypeToString((*q)->type(), (*q)->optional(), (*q)->getMetaData(), typeCtx, cpp11); } t += distance(q, paramList.end()) == 1 ? "" : ", "; } t += ")>"; return t; }