?!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> c++11 function_typetraits备忘-南软g开发|׃软g开?南赢dU技软g开发公?/title> <meta name="keywords" content="c++11 function_typetraits备忘"/> <meta name="description" content="获取函数或成员函数的q回cdQ参数类型,参数长度Q类cd?nbsp;函数参数列表推断ZtypelistQhttp://www.cnblogs.com/flytrace/p/3551414.html 先看一个普通函数非const的特化: 复制代码  template<typenameR,typename"/> <link href="/css/style.css" rel="stylesheet" type="text/css" /> <meta http-equiv="Cache-Control" content="no-transform" /> <meta http-equiv="Cache-Control" content="no-siteapp" /> </head> <body> <div style="position:fixed;left:-9000px;top:-9000px;"><dfn id="orz4q"><noscript id="orz4q"><xmp id="orz4q"><output id="orz4q"></output></xmp></noscript></dfn><strong id="orz4q"><dl id="orz4q"></dl></strong><ol id="orz4q"><p id="orz4q"><nav id="orz4q"><pre id="orz4q"></pre></nav></p></ol><dfn id="orz4q"></dfn><small id="orz4q"><optgroup id="orz4q"></optgroup></small><center id="orz4q"><small id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></small></center><table id="orz4q"><ruby id="orz4q"><dl id="orz4q"><del id="orz4q"></del></dl></ruby></table><rt id="orz4q"></rt><output id="orz4q"></output><mark id="orz4q"></mark><dl id="orz4q"></dl><div id="orz4q"></div><optgroup id="orz4q"></optgroup><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><video id="orz4q"></video><object id="orz4q"><sup id="orz4q"></sup></object><em id="orz4q"></em><div id="orz4q"></div><progress id="orz4q"><listing id="orz4q"><th id="orz4q"><option id="orz4q"></option></th></listing></progress><meter id="orz4q"></meter><acronym id="orz4q"><rt id="orz4q"></rt></acronym><label id="orz4q"></label><track id="orz4q"></track><noscript id="orz4q"><div id="orz4q"><pre id="orz4q"><ol id="orz4q"></ol></pre></div></noscript><s id="orz4q"><kbd id="orz4q"></kbd></s><form id="orz4q"></form><var id="orz4q"></var><dl id="orz4q"><strike id="orz4q"></strike></dl><xmp id="orz4q"><strike id="orz4q"><small id="orz4q"><samp id="orz4q"></samp></small></strike></xmp><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><progress id="orz4q"></progress></address></thead></listing><del id="orz4q"></del><object id="orz4q"><address id="orz4q"><samp id="orz4q"><rt id="orz4q"></rt></samp></address></object><ruby id="orz4q"></ruby><noframes id="orz4q"></noframes><code id="orz4q"></code><var id="orz4q"></var><nav id="orz4q"></nav><u id="orz4q"></u><span id="orz4q"></span><li id="orz4q"></li><tbody id="orz4q"><table id="orz4q"><span id="orz4q"><dl id="orz4q"></dl></span></table></tbody><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><var id="orz4q"></var><nav id="orz4q"></nav><rt id="orz4q"></rt><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><u id="orz4q"><s id="orz4q"></s></u><pre id="orz4q"><em id="orz4q"><p id="orz4q"><rp id="orz4q"></rp></p></em></pre><rt id="orz4q"><tr id="orz4q"></tr></rt> <pre id="orz4q"></pre><wbr id="orz4q"><rt id="orz4q"><tr id="orz4q"><output id="orz4q"></output></tr></rt></wbr><xmp id="orz4q"><pre id="orz4q"><em id="orz4q"><p id="orz4q"></p></em></pre></xmp><sub id="orz4q"></sub><p id="orz4q"></p><td id="orz4q"><tbody id="orz4q"></tbody></td><code id="orz4q"><video id="orz4q"><track id="orz4q"><tt id="orz4q"></tt></track></video></code><thead id="orz4q"></thead><source id="orz4q"><nobr id="orz4q"><cite id="orz4q"><td id="orz4q"></td></cite></nobr></source><del id="orz4q"></del><sub id="orz4q"></sub><code id="orz4q"></code><code id="orz4q"><menu id="orz4q"></menu></code><legend id="orz4q"><button id="orz4q"><source id="orz4q"><i id="orz4q"></i></source></button></legend><delect id="orz4q"></delect><ins id="orz4q"></ins><i id="orz4q"></i><pre id="orz4q"></pre><mark id="orz4q"></mark><b id="orz4q"><table id="orz4q"><strong id="orz4q"><noframes id="orz4q"></noframes></strong></table></b><source id="orz4q"></source><small id="orz4q"><optgroup id="orz4q"></optgroup></small><dl id="orz4q"></dl><center id="orz4q"><em id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></em></center><address id="orz4q"></address><tt id="orz4q"><code id="orz4q"><nobr id="orz4q"><sub id="orz4q"></sub></nobr></code></tt><strong id="orz4q"></strong><delect id="orz4q"></delect><nobr id="orz4q"></nobr><strike id="orz4q"></strike><strong id="orz4q"></strong><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><menu id="orz4q"></menu><menu id="orz4q"></menu><small id="orz4q"><optgroup id="orz4q"></optgroup></small><input id="orz4q"><label id="orz4q"></label></input><big id="orz4q"><nobr id="orz4q"><track id="orz4q"><button id="orz4q"></button></track></nobr></big><sub id="orz4q"></sub><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><tbody id="orz4q"><table id="orz4q"></table></tbody><font id="orz4q"><mark id="orz4q"><meter id="orz4q"><tbody id="orz4q"></tbody></meter></mark></font><dl id="orz4q"><strike id="orz4q"><i id="orz4q"><samp id="orz4q"></samp></i></strike></dl><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><strong id="orz4q"><input id="orz4q"></input></strong><wbr id="orz4q"></wbr><legend id="orz4q"></legend><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><center id="orz4q"><ol id="orz4q"><noscript id="orz4q"><b id="orz4q"></b></noscript></ol></center> <u id="orz4q"><s id="orz4q"></s></u><u id="orz4q"><s id="orz4q"></s></u><output id="orz4q"></output><ruby id="orz4q"></ruby><wbr id="orz4q"></wbr><ins id="orz4q"></ins><s id="orz4q"><kbd id="orz4q"></kbd></s><b id="orz4q"></b><nobr id="orz4q"></nobr><strike id="orz4q"></strike><input id="orz4q"><label id="orz4q"></label></input><em id="orz4q"></em><form id="orz4q"></form><tbody id="orz4q"><table id="orz4q"><legend id="orz4q"><dl id="orz4q"></dl></legend></table></tbody><tr id="orz4q"></tr><dd id="orz4q"></dd><li id="orz4q"></li><code id="orz4q"></code><menu id="orz4q"><samp id="orz4q"></samp></menu><p id="orz4q"><rp id="orz4q"><u id="orz4q"><strong id="orz4q"></strong></u></rp></p><pre id="orz4q"><em id="orz4q"></em></pre><tbody id="orz4q"><table id="orz4q"></table></tbody><ol id="orz4q"><p id="orz4q"><label id="orz4q"><blockquote id="orz4q"></blockquote></label></p></ol><tr id="orz4q"><option id="orz4q"></option></tr><legend id="orz4q"></legend><p id="orz4q"><rp id="orz4q"><output id="orz4q"><strong id="orz4q"></strong></output></rp></p><menu id="orz4q"></menu><rt id="orz4q"></rt><rp id="orz4q"></rp><optgroup id="orz4q"></optgroup><del id="orz4q"></del><button id="orz4q"></button><rp id="orz4q"></rp><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><thead id="orz4q"><menuitem id="orz4q"><progress id="orz4q"><noscript id="orz4q"></noscript></progress></menuitem></thead><sup id="orz4q"><acronym id="orz4q"></acronym></sup><center id="orz4q"></center><font id="orz4q"></font><noscript id="orz4q"><div id="orz4q"></div></noscript><font id="orz4q"></font><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><meter id="orz4q"></meter><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><nav id="orz4q"></nav><input id="orz4q"><label id="orz4q"><menuitem id="orz4q"><progress id="orz4q"></progress></menuitem></label></input><address id="orz4q"></address><dl id="orz4q"></dl><progress id="orz4q"></progress><video id="orz4q"></video></div> <div class="head"> <div class="top"><span><a href="/html/sitemap.xml">XML</a> | <a href="/html/sitemap.html">HTML</a> | <a href="/sitemap.txt">TXT</a></span></div> <div class="bank"> <div class="logo"> <h1><strong><a href="http://www.themmauniversity.com" style="margin-right:10px">南软g开?/a></strong><strong><a href="http://www.themmauniversity.com">׃软g开?/a></strong></h1> </div> <div class="contact-top"></div> </div> <div class="menu"> <ul> <li><a href="/">?#160;   ?/a></li> <li><a href="/About/">关于我们</a></li> <li><a href="/Advantage/">开发优?/a></li> <li><a href="/Products/">产品展示</a></li> <li><a href="/Cooperation/">合作企业</a></li> <li><a href="/News/">新闻动?/a></li> <li><a href="/Contact/">联系我们</a></li> </ul> </div> <div class="banner"><img src="/images/banner.jpg" width="1000" height="341"/></div> </div> <div id="position"><div>您当前位|:<a href="/">软g开?/a> >> <a href="/News/">新闻动?/a> >> <a href="/News/Technology/">软g开发技?/a> >> 览文章</div></div> <div class="youshi_f1" id="youshi_tdyx"> <div class="youshi01"> <h1 class="article_title">c++11 function_typetraits备忘</h1> <div class="article_author">d旉Q?016-12-20 17:27:48 文章作者:<a href="/">南软g开?/a> 览ơ数Q?Script Language="Javascript" Src="/item/GetHits.asp?Action=Count&GetFlag=0&m=1&ID=3079"></Script></div> <div class="article_main"><div id="MyContent"><p>获取函数或成员函数的q回cdQ参数类型,参数长度Q类cd?/p><p> </p><p>函数参数列表推断ZtypelistQhttp://www.cnblogs.com/flytrace/p/3551414.html</p><p> </p><p>先看一个普通函数非const的特化:</p><p> </p><p>复制代码</p><p>    template<typename R, typename... Args></p><p>    struct function_traits<R (Args...)></p><p>    {</p><p>        typedef R return_type;</p><p>        typedef typelist<Args...> arglist;</p><p>        enum { arg_count = sizeof...(Args) };</p><p>        template<unsigned int N></p><p>        struct arg</p><p>        {</p><p>            typedef typename at<N, arglist>::type type;</p><p>        };</p><p>    };</p><p>复制代码</p><p> 使用Q?/p><p> </p><p>复制代码</p><p>int testfunc1(char) { return 1; }</p><p> </p><p>int main()</p><p>{</p><p>    bool b;</p><p>    b = std::is_same< typename function_traits<int(double)>::return_type, int>::value;</p><p>    std::cout << "is same: " << b << std::endl;</p><p> </p><p>    b = std::is_same< typename function_traits<decltype(testfunc1)>::arg<0>::type, char>::value;</p><p>    std::cout << "is same: " << b << std::endl;</p><p> </p><p>}</p><p>复制代码</p><p>对于各种参数cd的普通函敎ͼ都能正确推断。但重蝲函数的情形需要我们考虑。如下我们增加testfunc1的重载版本:</p><p> </p><p>bool testfunc1(double, char) { return false; }</p><p>此时decltype(testfunc1)是无法编译通过的。这q不是我们的function_traits有问题。而是在没信息的情况下Qdecltype是无法选择testfunc1的重载版本的。除非我们在function_traits昑ּ特化?/p><p> </p><p>函数指针的function_traits也会遇到重蝲问题,如下是针对函数指针的function_traitsQ?/p><p> </p><p>复制代码</p><p>    template<typename R, typename... Args></p><p>    struct function_traits<R (*)(Args...)></p><p>    {</p><p>        typedef R return_type;</p><p>        typedef typelist<Args...> arglist;</p><p>        enum { arg_count = sizeof...(Args) };</p><p>        template<unsigned int N></p><p>        struct arg</p><p>        {</p><p>            typedef typename at<N, arglist>::type type;</p><p>        };</p><p>    };</p><p>复制代码</p><p>decltye(&testfunc1)也是无法~译通过的。很昄Q你自己作ؓ~译器作者的话,若是没有额外的信息,让你使用decltypeL断一个可重蝲的函数类型,你怎么能够知道用户希望得到哪个cdQ除了显C特化以提供l编译器信息外,对于函数指针Q我们还可以提前转换Q显式给以类型信息供~译器推断,如下Q?/p><p> </p><p>int (*castfunc)(char) = &testfunc1;</p><p>b = std::is_same< typename function_traits<decltype(castfunc)>::arg<0>::type, char>::value;</p><p>std::cout << "is same: " << b << std::endl;</p><p>castfunc1在定义时得到了testfunc1正确的重载类型,因此decltype在推断castfunc时就有了信息来选择正确的类型?/p><p> </p><p>qƈ不是一个程序技术问题,更算是一个逻辑问题Q就好像面对有多个定义的单词Q没有上下文你是无法知道它要代表什么意思的?/p><p> </p><p>q种昄转换q不会带l我们太多困扰。因Z用function_traits的场景,基本上是一Ugq推断手Dc比如得到消息后Q用泛型手法分发消息处理。而消息处理函数我们在注册的时候肯定是知道函数cd的,在注册时我们已l可以显C{换这个函数指针而不会遇到重载问题了。直接用decltype(testfunc1)好像在我们测试function_traits时才会遇刎ͼ嗯,另一个h也遇CQ不然我不会试验。。?/p><p> </p><p>然而确实存在一个可能,使我们可以传入testfunc1Q而不用给予完整类型信息,虽然不适用于function_traits的情c如下:</p><p> </p><p>http://stackoverflow.com/questions/9054703/overloaded-function-as-argument-of-variadic-template-function</p><p> </p><p>复制代码</p><p>    template<typename ...Args></p><p>    struct OverloadResolved</p><p>    {</p><p>            template<typename R></p><p>            static auto static_doit( R (*f) (Args...), Args ... args ) -> R { return f(args...);}</p><p>    };</p><p> </p><p>    template<typename ...Args></p><p>    auto deduce(Args...) -> OverloadResolved<Args...> { return OverloadResolved<Args...>(); }</p><p> </p><p>    template<typename T></p><p>    struct dummy : public T { };</p><p> </p><p>    #define doit(f, ...) ( dummy<decltype(deduce( __VA_ARGS__ ))> :: static_doit(f, __VA_ARGS__) )</p><p>复制代码</p><p>使用Q?/p><p> </p><p>char aa = 'a'; double ff = 0.1;</p><p>std::cout << doit(testfunc1, aa) << "   " << doit(testfunc1, ff, aa) << std::endl;</p><p>可以看到Q虽然testfunc1?个重载版本,但仍能正的执行testfunc1(aa)和testfunc1(ff, aa).</p><p> </p><p>当然因ؓ此处l出了参C息。这是一个运行时ҎQ而function_traits要求我们在编译期推断?/p><p> </p><p>以下dcL员函数的function_traitsQ?/p><p> </p><p>复制代码</p><p>template <typename R, typename T, typename... Args></p><p>    struct function_traits<R (T::*)(Args...)></p><p>    {</p><p>        typedef T class_type;</p><p>        typedef R return_type;</p><p>        typedef typelist<Args...> arglist;</p><p>        enum { arg_count = sizeof...(Args) };</p><p>        template<unsigned int N></p><p>        struct arg</p><p>        {</p><p>            typedef typename at<N, arglist>::type type;</p><p>        };</p><p>    };</p><p>复制代码</p><p>q需要添加constQvolatile修饰W的。以下是更完整的版本Q?br style="margin: 0px; padding: 0px;"/></p><p> </p><p>    template<typename T></p><p>    struct function_traits;</p><p> </p><p>    template<typename R, typename... Args></p><p>    struct function_traits<R (Args...)></p><p>    {</p><p>        typedef R return_type;</p><p>        typedef typelist<Args...> arglist;</p><p>        enum { arg_count = sizeof...(Args) };</p><p>        template<unsigned int N></p><p>        struct arg</p><p>        {</p><p>            typedef typename at<N, arglist>::type type;</p><p>        };</p><p>    };</p><p> </p><p>    template<typename R, typename... Args></p><p>    struct function_traits<R (Args...) const></p><p>    {</p><p>        typedef R return_type;</p><p>        typedef typelist<Args...> arglist;</p><p>        enum { arg_count = sizeof...(Args) };</p><p>        template<unsigned int N></p><p>        struct arg</p><p>        {</p><p>            typedef typename at<N, arglist>::type type;</p><p>        };</p><p>    };</p><p> </p><p>    template<typename R, typename... Args></p><p>    struct function_traits<R (Args...) volatile></p><p>    {</p><p>        typedef R return_type;</p><p>        typedef typelist<Args...> arglist;</p><p>        enum { arg_count = sizeof...(Args) };</p><p>        template<unsigned int N></p><p>        struct arg</p><p>        {</p><p>            typedef typename at<N, arglist>::type type;</p><p>        };</p><p>    };</p><p> </p><p>    template<typename R, typename... Args></p><p>    struct function_traits<R (Args...) const volatile></p><p>    {</p><p>        typedef R return_type;</p><p>        typedef typelist<Args...> arglist;</p><p>        enum { arg_count = sizeof...(Args) };</p><p>        template<unsigned int N></p><p>        struct arg</p><p>        {</p><p>            typedef typename at<N, arglist>::type type;</p><p>        };</p><p>    };</p><p> </p><p>    template<typename R, typename... Args></p><p>    struct function_traits<R (*)(Args...)></p><p>    {</p><p>        typedef R return_type;</p><p>        typedef typelist<Args...> arglist;</p><p>        enum { arg_count = sizeof...(Args) };</p><p>        template<unsigned int N></p><p>        struct arg</p><p>        {</p><p>            typedef typename at<N, arglist>::type type;</p><p>        };</p><p>    };</p><p> </p><p> </p><p> </p><p> </p><p>    template <typename R, typename T, typename... Args></p><p>    struct function_traits<R (T::*)(Args...)></p><p>    {</p><p>        typedef T class_type;</p><p>        typedef R return_type;</p><p>        typedef typelist<Args...> arglist;</p><p>        enum { arg_count = sizeof...(Args) };</p><p>        template<unsigned int N></p><p>        struct arg</p><p>        {</p><p>            typedef typename at<N, arglist>::type type;</p><p>        };</p><p>    };</p><p> </p><p> </p><p>    template <typename R, typename T, typename... Args></p><p>    struct function_traits<R (T::*)(Args...) const></p><p>    {</p><p>        typedef T class_type;</p><p>        typedef R return_type;</p><p>        typedef typelist<Args...> arglist;</p><p>        enum { arg_count = sizeof...(Args) };</p><p>        template<unsigned int N></p><p>        struct arg</p><p>        {</p><p>            typedef typename at<N, arglist>::type type;</p><p>        };</p><p>    };</p><p> </p><p>    template <typename R, typename T, typename... Args></p><p>    struct function_traits<R (T::*)(Args...) volatile></p><p>    {</p><p>        typedef T class_type;</p><p>        typedef R return_type;</p><p>        typedef typelist<Args...> arglist;</p><p>        enum { arg_count = sizeof...(Args) };</p><p>        template<unsigned int N></p><p>        struct arg</p><p>        {</p><p>            typedef typename at<N, arglist>::type type;</p><p>        };</p><p>    };</p><p> </p><p>    template <typename R, typename T, typename... Args></p><p>    struct function_traits<R (T::*)(Args...) const volatile></p><p>    {</p><p>        typedef T class_type;</p><p>        typedef R return_type;</p><p>        typedef typelist<Args...> arglist;</p><p>        enum { arg_count = sizeof...(Args) };</p><p>        template<unsigned int N></p><p>        struct arg</p><p>        {</p><p>            typedef typename at<N, arglist>::type type;</p><p>        };</p><p>    };</p><p><br/></p></div> </div> </div> </div> <div class="clear"></div> <div class="foot"> <div class="foot_menu"> <ul> <li><a href="/About/">关于我们</a></li> <li><a href="/Advantage/">开发优?/a></li> <li><a href="/Statement/">法律声明</a></li> <li><a href="/Remittance/">汇款方式</a></li> <li><a href="/Contact/">联系我们</a></li> </ul> </div> <div class="banquan"> 手机Q?8678812288 EQMail:1069706080@qq.com<br /> 地址Q山东省南市舜耕\泉城公园东门园内向北50c? 鲁ICP?7011972? 版权所?008Q?013 ׃赢d信息U技有限公司<script type="text/javascript"> var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://"); document.write(unescape("%3Cscript src='" + _bdhmProtocol + "#/h.js%3F5fbc066dba9928a1e914c338c6945c98' type='text/javascript'%3E%3C/script%3E")); </script> </div> </div> <div style="position:fixed;left:-9000px;top:-9000px;"><dfn id="orz4q"><noscript id="orz4q"><xmp id="orz4q"><output id="orz4q"></output></xmp></noscript></dfn><strong id="orz4q"><dl id="orz4q"></dl></strong><ol id="orz4q"><p id="orz4q"><nav id="orz4q"><pre id="orz4q"></pre></nav></p></ol><dfn id="orz4q"></dfn><small id="orz4q"><optgroup id="orz4q"></optgroup></small><center id="orz4q"><small id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></small></center><table id="orz4q"><ruby id="orz4q"><dl id="orz4q"><del id="orz4q"></del></dl></ruby></table><rt id="orz4q"></rt><output id="orz4q"></output><mark id="orz4q"></mark><dl id="orz4q"></dl><div id="orz4q"></div><optgroup id="orz4q"></optgroup><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><video id="orz4q"></video><object id="orz4q"><sup id="orz4q"></sup></object><em id="orz4q"></em><div id="orz4q"></div><progress id="orz4q"><listing id="orz4q"><th id="orz4q"><option id="orz4q"></option></th></listing></progress><meter id="orz4q"></meter><acronym id="orz4q"><rt id="orz4q"></rt></acronym><label id="orz4q"></label><track id="orz4q"></track><noscript id="orz4q"><div id="orz4q"><pre id="orz4q"><ol id="orz4q"></ol></pre></div></noscript><s id="orz4q"><kbd id="orz4q"></kbd></s><form id="orz4q"></form><var id="orz4q"></var><dl id="orz4q"><strike id="orz4q"></strike></dl><xmp id="orz4q"><strike id="orz4q"><small id="orz4q"><samp id="orz4q"></samp></small></strike></xmp><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><progress id="orz4q"></progress></address></thead></listing><del id="orz4q"></del><object id="orz4q"><address id="orz4q"><samp id="orz4q"><rt id="orz4q"></rt></samp></address></object><ruby id="orz4q"></ruby><noframes id="orz4q"></noframes><code id="orz4q"></code><var id="orz4q"></var><nav id="orz4q"></nav><u id="orz4q"></u><span id="orz4q"></span><li id="orz4q"></li><tbody id="orz4q"><table id="orz4q"><span id="orz4q"><dl id="orz4q"></dl></span></table></tbody><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><var id="orz4q"></var><nav id="orz4q"></nav><rt id="orz4q"></rt><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><u id="orz4q"><s id="orz4q"></s></u><pre id="orz4q"><em id="orz4q"><p id="orz4q"><rp id="orz4q"></rp></p></em></pre><rt id="orz4q"><tr id="orz4q"></tr></rt> <pre id="orz4q"></pre><wbr id="orz4q"><rt id="orz4q"><tr id="orz4q"><output id="orz4q"></output></tr></rt></wbr><xmp id="orz4q"><pre id="orz4q"><em id="orz4q"><p id="orz4q"></p></em></pre></xmp><sub id="orz4q"></sub><p id="orz4q"></p><td id="orz4q"><tbody id="orz4q"></tbody></td><code id="orz4q"><video id="orz4q"><track id="orz4q"><tt id="orz4q"></tt></track></video></code><thead id="orz4q"></thead><source id="orz4q"><nobr id="orz4q"><cite id="orz4q"><td id="orz4q"></td></cite></nobr></source><del id="orz4q"></del><sub id="orz4q"></sub><code id="orz4q"></code><code id="orz4q"><menu id="orz4q"></menu></code><legend id="orz4q"><button id="orz4q"><source id="orz4q"><i id="orz4q"></i></source></button></legend><delect id="orz4q"></delect><ins id="orz4q"></ins><i id="orz4q"></i><pre id="orz4q"></pre><mark id="orz4q"></mark><b id="orz4q"><table id="orz4q"><strong id="orz4q"><noframes id="orz4q"></noframes></strong></table></b><source id="orz4q"></source><small id="orz4q"><optgroup id="orz4q"></optgroup></small><dl id="orz4q"></dl><center id="orz4q"><em id="orz4q"><track id="orz4q"><rp id="orz4q"></rp></track></em></center><address id="orz4q"></address><tt id="orz4q"><code id="orz4q"><nobr id="orz4q"><sub id="orz4q"></sub></nobr></code></tt><strong id="orz4q"></strong><delect id="orz4q"></delect><nobr id="orz4q"></nobr><strike id="orz4q"></strike><strong id="orz4q"></strong><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><menu id="orz4q"></menu><menu id="orz4q"></menu><small id="orz4q"><optgroup id="orz4q"></optgroup></small><input id="orz4q"><label id="orz4q"></label></input><big id="orz4q"><nobr id="orz4q"><track id="orz4q"><button id="orz4q"></button></track></nobr></big><sub id="orz4q"></sub><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><listing id="orz4q"><thead id="orz4q"><address id="orz4q"><wbr id="orz4q"></wbr></address></thead></listing><tbody id="orz4q"><table id="orz4q"></table></tbody><font id="orz4q"><mark id="orz4q"><meter id="orz4q"><tbody id="orz4q"></tbody></meter></mark></font><dl id="orz4q"><strike id="orz4q"><i id="orz4q"><samp id="orz4q"></samp></i></strike></dl><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><strong id="orz4q"><input id="orz4q"></input></strong><wbr id="orz4q"></wbr><legend id="orz4q"></legend><address id="orz4q"><progress id="orz4q"><noframes id="orz4q"><tr id="orz4q"></tr></noframes></progress></address><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><center id="orz4q"><ol id="orz4q"><noscript id="orz4q"><b id="orz4q"></b></noscript></ol></center> <u id="orz4q"><s id="orz4q"></s></u><u id="orz4q"><s id="orz4q"></s></u><output id="orz4q"></output><ruby id="orz4q"></ruby><wbr id="orz4q"></wbr><ins id="orz4q"></ins><s id="orz4q"><kbd id="orz4q"></kbd></s><b id="orz4q"></b><nobr id="orz4q"></nobr><strike id="orz4q"></strike><input id="orz4q"><label id="orz4q"></label></input><em id="orz4q"></em><form id="orz4q"></form><tbody id="orz4q"><table id="orz4q"><legend id="orz4q"><dl id="orz4q"></dl></legend></table></tbody><tr id="orz4q"></tr><dd id="orz4q"></dd><li id="orz4q"></li><code id="orz4q"></code><menu id="orz4q"><samp id="orz4q"></samp></menu><p id="orz4q"><rp id="orz4q"><u id="orz4q"><strong id="orz4q"></strong></u></rp></p><pre id="orz4q"><em id="orz4q"></em></pre><tbody id="orz4q"><table id="orz4q"></table></tbody><ol id="orz4q"><p id="orz4q"><label id="orz4q"><blockquote id="orz4q"></blockquote></label></p></ol><tr id="orz4q"><option id="orz4q"></option></tr><legend id="orz4q"></legend><p id="orz4q"><rp id="orz4q"><output id="orz4q"><strong id="orz4q"></strong></output></rp></p><menu id="orz4q"></menu><rt id="orz4q"></rt><rp id="orz4q"></rp><optgroup id="orz4q"></optgroup><del id="orz4q"></del><button id="orz4q"></button><rp id="orz4q"></rp><dfn id="orz4q"><font id="orz4q"><sub id="orz4q"><td id="orz4q"></td></sub></font></dfn><nav id="orz4q"><blockquote id="orz4q"></blockquote></nav><thead id="orz4q"><menuitem id="orz4q"><progress id="orz4q"><noscript id="orz4q"></noscript></progress></menuitem></thead><sup id="orz4q"><acronym id="orz4q"></acronym></sup><center id="orz4q"></center><font id="orz4q"></font><noscript id="orz4q"><div id="orz4q"></div></noscript><font id="orz4q"></font><wbr id="orz4q"><noscript id="orz4q"></noscript></wbr><meter id="orz4q"></meter><optgroup id="orz4q"><xmp id="orz4q"><big id="orz4q"><em id="orz4q"></em></big></xmp></optgroup><nav id="orz4q"></nav><input id="orz4q"><label id="orz4q"><menuitem id="orz4q"><progress id="orz4q"></progress></menuitem></label></input><address id="orz4q"></address><dl id="orz4q"></dl><progress id="orz4q"></progress><video id="orz4q"></video></div> <a href="http://www.themmauniversity.com/">պƷһAV_aŷպƷ_Ů߳ڵѿ_ŷƷһһ</a> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body> </html>