本文整理汇总了C++中Arg::add_unique方法的典型用法代码示例。如果您正苦于以下问题:C++ Arg::add_unique方法的具体用法?C++ Arg::add_unique怎么用?C++ Arg::add_unique使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Arg
的用法示例。
在下文中一共展示了Arg::add_unique方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: parse
////////////////////////////////////////////////////////////////////////////////
///Parse function declaration after ifc_fn
bool MethodIG::parse( iglexer& lex, const charstr& host, const charstr& ns, dynarray<Arg>& irefargs )
{
bstatic = lex.match_optional("static");
//rettype fncname '(' ...
if(!ret.parse(lex, false))
throw lex.exc();
bhasifctargets = !ret.ifctarget.is_empty();
if(!bstatic && ret.biref)
ret.add_unique(irefargs);
biref=bptr=false;
if(bstatic) {
charstr tmp;
if(ret.bptr && ret.type == ((tmp=host)<<'*')) {
(ret.type="iref<")<<ns<<host<<'>';
}
else if(ret.type == ((tmp="iref<")<<host<<'>')) {
biref = true;
(ret.type="iref<")<<ns<<host<<'>';
}
else if(ret.type == ((tmp="iref<")<<ns<<host<<'>'))
biref = true;
//else if(ret.type == ((tmp="ref<")<<ns<<host<<'>'))
// ;
//else if(ret.type == ((tmp=ns)<<host<<'*'))
// bptr = true;
else {
lex.set_err() << "invalid return type for static interface creator method\n"
" should be iref<" << host << ">";
throw lex.exc();
}
storage = ret.type;
}
lex.match(lex.IDENT, name, "expected method name");
boperator = name == "operator";
if(boperator) {
lex.match('(');
lex.match(')');
name << "()";
}
binternal = binternal || name.first_char() == '_';
lex.match('(');
ninargs = noutargs = 0;
if(!lex.matches(')')) {
do {
if( !args.add()->parse(lex, true) )
throw lex.exc();
Arg* arg = args.last();
if(arg->binarg) {
++ninargs;
if(!arg->defval)
++ninargs_nondef;
}
if(arg->boutarg)
++noutargs;
arg->tokenpar = arg->binarg &&
(arg->basetype=="token" || arg->basetype=="coid::token" || arg->basetype=="charstr" || arg->basetype=="coid::charstr");
if(!bstatic && arg->biref && arg->boutarg)
arg->add_unique(irefargs);
if(arg->ifctarget)
bhasifctargets = true;
}
while(lex.matches(','));
lex.match(')');
}
bconst = lex.matches("const");
//optional default event impl
bool evbody = lex.matches(lex.IFC_EVBODY);
if(evbody)
{
default_event_body = lex.match_block(lex.ROUND, true);
if(default_event_body.first_char() == '"') {
default_event_body.del(0, 1);
if(default_event_body.last_char() == '"')
default_event_body.resize(-1);
}
//.........这里部分代码省略.........