当前位置: 首页>>代码示例>>C++>>正文


C++ Arg::add_unique方法代码示例

本文整理汇总了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);
        }
//.........这里部分代码省略.........
开发者ID:cyrilgramblicka,项目名称:X264RecorderPlugin,代码行数:101,代码来源:ig-method.cpp


注:本文中的Arg::add_unique方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。