• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于C++17的泛型函數(shù)容器實現(xiàn)方法研究

    2019-07-03 02:31閔軍羅泓
    軟件工程 2019年5期
    關(guān)鍵詞:型函數(shù)調(diào)用容器

    閔軍 羅泓

    摘? 要:泛型函數(shù)容器的使用可以解耦對象之間的調(diào)用關(guān)系,有利于實現(xiàn)高內(nèi)聚、低耦合的軟件設(shè)計原則。C++標(biāo)準(zhǔn)庫中并沒有這樣的容器,用C++舊標(biāo)準(zhǔn)實現(xiàn)也很困難、很低效。C++1x等新標(biāo)準(zhǔn)發(fā)布后,出現(xiàn)了一些更好的實現(xiàn)方式。本文將在已有設(shè)計的基礎(chǔ)之上,基于C++17新標(biāo)準(zhǔn),利用if constexpr、fold expression、std::invoke等新技術(shù),提供一種泛型函數(shù)容器的實現(xiàn)方式。測試表明該實現(xiàn)方式簡潔高效,解決了重載函數(shù)和某些特殊函數(shù)的注冊調(diào)用問題,可以顯著降低耦合性、提高代碼復(fù)用性。

    關(guān)鍵詞:C++17;泛型;函數(shù)容器;高內(nèi)聚;低耦合

    中圖分類號:TP311.1? ? ?文獻(xiàn)標(biāo)識碼:A

    Abstract:The application of generic function containers can decouple the calling relationships between objects,conducive to the realization of high cohesion and low coupling software design principles.There is no such container in the C++ standard library,and it is very difficult and inefficient to implement with the old C++ standard.The release of new standards,such as C++1x,has brought some better implementation methods.This paper provides a generic function container implementation method based on the existing design and the new C++17 standard,via some new technologies such as if constexpr,fold expression,and std::invoke.Test results show that the simple and efficient implementation method effectively solves the problem of registration and calling of overloaded functions and some special functions,significantly reducing coupling and improving code reusability.

    Keywords:C++17;generic;function container;high aggregation;low coupling

    1? ?引言(Introduction)

    高內(nèi)聚、低耦合是軟件設(shè)計的基本原則,泛型函數(shù)容器的使用可以解耦對象之間的調(diào)用關(guān)系,有利于實現(xiàn)軟件設(shè)計的這一基本原則[1]。作為一種萬能函數(shù)注冊器,泛型函數(shù)容器可以將任意類型的函數(shù)用一個key進(jìn)行注冊以供其他程序調(diào)用,可以注冊普通函數(shù)、函數(shù)模板、成員函數(shù)、函數(shù)對象、lambda表達(dá)式、重載函數(shù)和某些特殊函數(shù)等。當(dāng)全局函數(shù)或?qū)ο笾g存在交互調(diào)用需求時,比如需要相互調(diào)用對方成員函數(shù)或者不適合關(guān)聯(lián)的無關(guān)對象之間需要調(diào)用其他對象的成員函數(shù)或者全局函數(shù)需要調(diào)用成員函數(shù)等類似需求時,我們便可以將需要被調(diào)用的函數(shù)用一個key注冊起來以供其他實體調(diào)用。函數(shù)的調(diào)用者不必知道被調(diào)用者,二者都依賴于中間的泛型函數(shù)容器,借此便可以解耦對象之間的調(diào)用關(guān)系[2]。

    C++標(biāo)準(zhǔn)庫中并沒有現(xiàn)存的泛型函數(shù)容器,用C++舊標(biāo)準(zhǔn)實現(xiàn)也很困難、很低效[3]。C++11、C++14、C++17等新標(biāo)準(zhǔn)發(fā)布后,出現(xiàn)了一些更好的實現(xiàn)方式。本文便是在已有設(shè)計的基礎(chǔ)之上,基于C++17新標(biāo)準(zhǔn),利用if constexpr、fold expression、std::invoke等新技術(shù),提供一種泛型函數(shù)容器的實現(xiàn)方式[4,5]。

    2? 泛型函數(shù)容器的結(jié)構(gòu)設(shè)計(Design of genericfunction container structure)

    泛型函數(shù)容器的基本結(jié)構(gòu)與C++ STL中的容器類似。在把各種不同類型的函數(shù)存入容器時必須轉(zhuǎn)換為統(tǒng)一的數(shù)據(jù)結(jié)構(gòu),通過一個key進(jìn)行注冊,此后用戶便可以借助這個key和必要信息提取已注冊的記錄來執(zhí)行該函數(shù),從而實現(xiàn)泛型函數(shù)容器的基本功能。

    2.1? ?泛型函數(shù)容器的結(jié)構(gòu)圖

    2.2? ?函數(shù)存取結(jié)構(gòu)的設(shè)計

    由于泛型函數(shù)容器需要存取各種不同類型的函數(shù),具體包括普通函數(shù)、函數(shù)模板、成員函數(shù)、函數(shù)對象、lambda表達(dá)式、重載函數(shù)和某些特殊函數(shù)等,所以需要抽象出能夠區(qū)分各種不同函數(shù)的標(biāo)志特征:函數(shù)簽名(Function Signature)。類似于用簽名可以識別不同人一樣,通過函數(shù)簽名便可以識別不同的函數(shù)[6]。從便于注冊和提取的角度,本項目主要關(guān)注函數(shù)簽名的四個部分:函數(shù)名f、函數(shù)所屬對象的指針pObj、參數(shù)包指針pArgsList、返回值指針pRet。若是成員函數(shù),pObj必須明確賦值,否則就必須賦值為空指針nullptr。

    然后設(shè)計一個函數(shù)封裝類invoker,用來保存注冊函數(shù)的函數(shù)簽名。Fun是注冊函數(shù)的具體類型(包含函數(shù)簽名),每注冊一個函數(shù)就創(chuàng)建一個以模板參數(shù)Fun區(qū)分的該類對象,每個不同對象保存了注冊函數(shù)的函數(shù)簽名(包含四個部分),調(diào)用時便可以從中提取函數(shù)簽名來執(zhí)行該函數(shù)。

    2.3? ?函數(shù)注冊和提取部分的設(shè)計

    函數(shù)注冊時需要完整保存函數(shù)簽名各個部分的信息,不過調(diào)用時并不需要用戶提供完整的函數(shù)簽名。為了簡化調(diào)用方式,函數(shù)調(diào)用時用戶只需輸入函數(shù)參數(shù)列表和返回值類型即可,若是無返回值函數(shù)則只需輸入函數(shù)參數(shù)列表(可以理解為返回值為void類型)。按照以上設(shè)計思路,注冊函數(shù)時需要完整保存函數(shù)簽名的四個部分,調(diào)用函數(shù)時用戶只需輸入兩個參數(shù)即可。因此,設(shè)計注冊函數(shù)reg_fun時需要有四個參數(shù),設(shè)計調(diào)用函數(shù)call時只需有兩個參數(shù)即可。具體實現(xiàn)可參見后面完整代碼中的reg_fun、call。

    3? 關(guān)鍵數(shù)據(jù)成員m_mapInvoker的設(shè)計(Design of the key data member m_mapInvoker)

    3.1? ?關(guān)鍵數(shù)據(jù)成員m_mapInvoker保存的是key與函數(shù)的成對記錄

    我們可以使用std::map容器來保存泛型函數(shù)容器的注冊數(shù)據(jù)。在本項目中,關(guān)鍵數(shù)據(jù)成員m_mapInvoker便是用于保存key與函數(shù)成對記錄的std::map容器。m_mapInvoker的key字段為std::string類型,是用戶指定名稱或者返回值及參數(shù)類型名稱的累加字符串;data字段則是std::function類模版封裝的特殊函數(shù)類型[7]。

    若用戶注冊時指定了注冊名稱便以此為該條記錄的key,此時的key用std::string類型,不至于產(chǎn)生混淆。不過在調(diào)用該注冊函數(shù)時,若直接使用std::string類型的key,便可能與參數(shù)類型產(chǎn)生混淆,因為注冊函數(shù)的第一個參數(shù)也可能是std::string類型。所以,在調(diào)用該注冊函數(shù)時,必須使用key_fun類型的key,才能避免可能發(fā)生的混淆。fun_key是只含一個數(shù)據(jù)成員std::string key的簡單封裝類型,其主要作用就是在調(diào)用時避免與函數(shù)參數(shù)發(fā)生混淆。

    若用戶注冊時未指定注冊名稱,便使用返回值及參數(shù)類型名稱的累加字符串作為該條記錄的key,提取時也會自動生成返回值及參數(shù)類型名稱的累加字符串作為key來查詢調(diào)用該注冊函數(shù)。這樣的設(shè)計,同時也解決了參數(shù)列表相同、返回值不同的多個函數(shù)的注冊調(diào)用問題。

    m_mapInvoker的data字段用于保存函數(shù)簽名的四個部分,它是以std::function類模版封裝的特殊函數(shù)void(void*,void*)。該封裝函數(shù)無返回值,第一個參數(shù)為注冊函數(shù)的參數(shù)包指針,第二個參數(shù)為注冊函數(shù)的返回值指針。

    具體實現(xiàn)可以參見完整代碼中的fun_key類(其結(jié)構(gòu)參見圖2)、call_impl、get_key_from_fun_args等函數(shù),以及后面的測試代碼。

    3.2? ?封裝函數(shù)的原始模型

    關(guān)鍵數(shù)據(jù)成員m_mapInvoker的data字段中保存的并非單純的封裝函數(shù),而是通過std::bind綁定到原始函數(shù)模型上的間接函數(shù)[8]。封裝函數(shù)的原始模型是invoker::apply(…),F(xiàn)un是注冊函數(shù)的函數(shù)類型(包含函數(shù)簽名),Object是注冊函數(shù)所屬的對象類型(若是非成員函數(shù)則為void)。原始函數(shù)invoker::apply(…)有四個參數(shù),分別用于關(guān)聯(lián)注冊函數(shù)類型(函數(shù)簽名)的四個部分:函數(shù)名f、成員函數(shù)的對象指針pObj、參數(shù)包指針_1、返回值指針_2。_1、_2為C++11新標(biāo)準(zhǔn)的占位符[9],是用戶在提取記錄調(diào)用注冊函數(shù)時需要輸入的參數(shù),若注冊函數(shù)無返回值,則只需輸入第一個參數(shù)即可。具體可以參見后面的完整代碼。

    3.3? ?解決重載函數(shù)和某些特殊函數(shù)的注冊調(diào)用問題

    在以上設(shè)計的泛型函數(shù)容器中,若直接注冊存在兩個以上實例的重載函數(shù),編譯時就會報錯。解決該問題的思路很簡單,就是針對重載函數(shù)的多個實例對應(yīng)地定義多個不同名稱和類型的函數(shù)指針、并將重載函數(shù)賦值給它們,這就相當(dāng)于將多個重載函數(shù)的實例轉(zhuǎn)換成為多個不同名稱和類型的新函數(shù)指針。使用這些新的函數(shù)指針便能在泛型函數(shù)容器中成功進(jìn)行注冊和調(diào)用。另外,也可以用lambda表達(dá)式來消除重載函數(shù)的二義性[10]。對某些特殊函數(shù)的處理也類似,包括特殊函數(shù)1:參數(shù)列表相同、返回值不同的多個函數(shù)的注冊和調(diào)用,這在本項目設(shè)計中已經(jīng)解決;特殊函數(shù)2:參數(shù)列表相同、返回值相同的多個函數(shù)的注冊和調(diào)用,可以用lambda表達(dá)式封裝該函數(shù),增加一個參數(shù)即可。具體請參見后面的測試代碼。

    4? ?利用C++17新技術(shù)優(yōu)化代碼設(shè)計(Optimize code design with C++17 new technology)在本項目中,使用了C++17的if constexpr[11]新技術(shù)在編譯期進(jìn)行判斷,去除enable_if_t,合并許多功能類似的函數(shù)。包括:合并非成員函數(shù)、成員函數(shù)注冊的兩種reg_fun函數(shù);合并有返回值、無返回值的兩種call函數(shù);合并Key與fun_key類型相同和不同的兩種call_impl、get_key_from_fun_args函數(shù)等。

    在C++17之前,我們經(jīng)常用逗號表達(dá)式和std::initializer_list將變參依次傳入一個函數(shù)。用C++17的fold expression折疊表達(dá)式代替initializer_list,就要簡潔得多[12]。本項目便使用了C++17的這一新技術(shù)簡化代碼設(shè)計。

    利用C++17的invoke調(diào)用器,可以合并非成員函數(shù)、成員函數(shù)的調(diào)用,統(tǒng)一使用std::invoke(f,pArgsList)這種簡捷形式進(jìn)行調(diào)用[13]。當(dāng)然,成員函數(shù)調(diào)用時,對象實例必須放在 pArgsList的首位,作為第一個參數(shù)。在本項目中,便使用了C++17的這一新技術(shù)簡化代碼設(shè)計。

    5? ?C++17泛型函數(shù)容器的完整實現(xiàn)代碼(Complete implementation code of C++17 generic function container)

    5.1? ?泛型函數(shù)容器的完整實現(xiàn)代碼

    以下便是本文介紹的泛型函數(shù)容器的完整實現(xiàn)代碼。用戶需要注意的是,以下代碼是基于C++17新標(biāo)準(zhǔn)實現(xiàn)的,需要在支持C++17的編譯器中才能夠正常編譯,比如Visual Studio 2017 15.3[14]、CodeBlocks 17.12 with GCC 7.2及以上版本[15]。

    6? 泛型函數(shù)容器的實際使用(Actual use of generic function container)

    下面代碼測試了泛型函數(shù)容器的實際使用。測試可以分為注冊函數(shù)時輸入key和未輸入key兩大類。每一大類都可以實現(xiàn)無返回值普通函數(shù)、帶返回值普通函數(shù)、函數(shù)模板、成員函數(shù)、函數(shù)對象、lambda表達(dá)式、重載函數(shù)、某些特殊函數(shù)等的注冊和調(diào)用。

    6.1? ?實際使用的測試代碼

    6.2? ?重載函數(shù)和某些特殊函數(shù)的注冊調(diào)用測試

    前面已經(jīng)提到,本項目解決了重載函數(shù)和某些特殊函數(shù)的注冊調(diào)用問題。具體測試代碼如下。

    7? ?結(jié)論(Conclusion)

    綜上所述,泛型函數(shù)容器可以將任意類型的函數(shù)用一個key進(jìn)行注冊以供其他程序調(diào)用,它的使用可以解耦對象之間的調(diào)用關(guān)系,有利于實現(xiàn)高內(nèi)聚、低耦合的軟件設(shè)計原則。C++標(biāo)準(zhǔn)庫中并沒有這樣的容器,用C++舊標(biāo)準(zhǔn)實現(xiàn)也很困難、很低效。C++1x等新標(biāo)準(zhǔn)發(fā)布后,出現(xiàn)了一些更好的實現(xiàn)方式。本文便是在已有設(shè)計的基礎(chǔ)之上,基于C++17新標(biāo)準(zhǔn),利用if constexpr、fold expression、std::invoke等新技術(shù),提供一種泛型函數(shù)容器的實現(xiàn)方式。測試結(jié)果表明,該實現(xiàn)方式簡潔高效地實現(xiàn)了任意類型函數(shù)的注冊和調(diào)用,并且解決了重載函數(shù)和某些特殊函數(shù)的注冊調(diào)用問題,可以顯著降低耦合性、提高代碼復(fù)用性。

    參考文獻(xiàn)(References)

    [1] Ofenbeck G,Rompf T,Püschel M.Staging for generic programming in space and time[C].The ACM SIGPLAN International Conference.ACM,2017:15-28.

    [2] Bemardi ML,Cimitile M,Lucca GD.Design pattem detection using a DSL-driven graph matching approach[J].Journal of Software Evolution&Process,2014,26(12):1233-1266.

    [3] B Rasool G,Mader P.A customizable approach to design pattems recognition based 011 feature types[J].Arabian Journal for Science&Engineering,2014,39(12):8851-8873.

    [4] Chen Yewang,Jiang Zhixiong,Zhao Wenyun,et al.Generic component:a generic programming approach[EB/OL].https://www.computer.org/csdl/proceedings/cit/2007/2983/00/29830087-abs.html,2018 IEEE.

    [5] Yallop J.Staging,generic programming[M].New York:ACM,2016:85-96.

    [6] 符號修飾(name decoration)與函數(shù)簽名(function signature)[EB/OL].https://blog.csdn.net/weiwangchao_/article/details/7165467,2011-12-30.

    [7] std::function[EB/OL].https://en.cppreference.com/w/cpp/utility/functional/function,2018-06-15.

    [8] Bjarne Stroustrup.The C++ Programming Language Fourth Edition[M].USA:Addison-Wesley Professional,2013:967.

    [9] std::placeholders[EB/OL].https://en.cppreference.com/w/cpp/utility/functional/placeholders,2018-06-15.

    [10] Stanley B,Lippman.C++ Primer 5th Edition[M].USA:Addison-Wesley Professional,2012:572-574.

    [11] if statement,attr(optional)if constexpr(optional)(init-statement(optional)condition)statement-true else statement-false[EB/OL].https://en.cppreference.com/w/cpp/language/if,2018-08-21.

    [12] Fold expression(since C++17)[EB/OL].https://en.cppreference.com/w/cpp/language/fold,2018-07-19.

    [13] std::invoke[EB/OL].https://en.cppreference.com/w/cpp/utility/functional/invoke,2018-07-06.

    [14] C++ conformance improvements in Visual Studio 2017 versions[EB/OL].https://docs.microsoft.com/en-us/cpp/cpp-conformance-improvements-2017?view=vs-2017,2018-08-15.

    [15] C++ Standards Support in GCC[EB/OL].https://gcc.gnu.org/projects/cxx-status.html,2018-09-30.

    [16] 獲得函數(shù)返回值類型、參數(shù)tuple、成員函數(shù)指針中的對象類型[EB/OL].https://www.cnblogs.com/ybmj/p/9651227.html,2018-09-15.

    猜你喜歡
    型函數(shù)調(diào)用容器
    Different Containers不同的容器
    幾類“對勾”型函數(shù)最值問題的解法
    難以置信的事情
    核電項目物項調(diào)用管理的應(yīng)用研究
    LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
    基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
    Orlicz Sylvester Busemann型函數(shù)的極值研究
    V-型函數(shù)的周期點
    用共軛法解Dhombres型函數(shù)方程
    利用RFC技術(shù)實現(xiàn)SAP系統(tǒng)接口通信
    av在线老鸭窝| 18+在线观看网站| 一级黄色大片毛片| 亚洲成人中文字幕在线播放| 免费高清视频大片| 日本一二三区视频观看| 欧美丝袜亚洲另类 | 熟女电影av网| avwww免费| 一个人免费在线观看的高清视频| 美女cb高潮喷水在线观看| 亚洲不卡免费看| 亚洲国产日韩欧美精品在线观看| 成人毛片a级毛片在线播放| 日韩欧美三级三区| 日日干狠狠操夜夜爽| 亚洲成a人片在线一区二区| 国产av麻豆久久久久久久| 日本黄色视频三级网站网址| 久久婷婷人人爽人人干人人爱| 51午夜福利影视在线观看| 国内精品久久久久久久电影| 可以在线观看毛片的网站| 成年女人看的毛片在线观看| 色吧在线观看| 18美女黄网站色大片免费观看| 精品99又大又爽又粗少妇毛片 | 嫩草影视91久久| 五月玫瑰六月丁香| 高清毛片免费观看视频网站| 久久精品国产亚洲av天美| 欧美乱色亚洲激情| 免费看a级黄色片| 欧美性猛交黑人性爽| 别揉我奶头~嗯~啊~动态视频| 又黄又爽又刺激的免费视频.| 在线观看免费视频日本深夜| 热99在线观看视频| 99国产精品一区二区蜜桃av| 国产精品伦人一区二区| 国产伦在线观看视频一区| 国产精品影院久久| 欧美一区二区国产精品久久精品| 精品一区二区三区视频在线| 国内精品久久久久精免费| 精品国产亚洲在线| 丰满人妻一区二区三区视频av| 久久天躁狠狠躁夜夜2o2o| 精品99又大又爽又粗少妇毛片 | 九九久久精品国产亚洲av麻豆| 亚洲av熟女| 老司机午夜福利在线观看视频| 欧美绝顶高潮抽搐喷水| 深夜a级毛片| 日本免费a在线| 最新在线观看一区二区三区| 国产午夜精品论理片| 婷婷精品国产亚洲av在线| 国产精品日韩av在线免费观看| 亚洲国产色片| av专区在线播放| 国产精品综合久久久久久久免费| 变态另类丝袜制服| 国产精品美女特级片免费视频播放器| 99热精品在线国产| 两个人的视频大全免费| 欧美精品国产亚洲| av女优亚洲男人天堂| 国产探花在线观看一区二区| 免费在线观看影片大全网站| 九色成人免费人妻av| 一级作爱视频免费观看| 欧美潮喷喷水| 亚洲专区中文字幕在线| 综合色av麻豆| 很黄的视频免费| 18+在线观看网站| 亚洲精品一区av在线观看| 国产精品自产拍在线观看55亚洲| 日本黄色片子视频| 久久精品国产亚洲av涩爱 | 99热这里只有是精品50| 国产精品久久久久久久电影| 在线免费观看的www视频| 美女cb高潮喷水在线观看| 久久久精品大字幕| 亚洲成人久久性| 变态另类丝袜制服| 少妇人妻精品综合一区二区 | 亚洲熟妇熟女久久| 可以在线观看的亚洲视频| 99精品在免费线老司机午夜| 在线观看av片永久免费下载| 亚洲狠狠婷婷综合久久图片| xxxwww97欧美| 特级一级黄色大片| 亚洲成人中文字幕在线播放| 91久久精品国产一区二区成人| 亚洲精品乱码久久久v下载方式| 亚洲av二区三区四区| 热99在线观看视频| 男人的好看免费观看在线视频| 男女那种视频在线观看| 一区二区三区高清视频在线| a级毛片免费高清观看在线播放| 中文字幕精品亚洲无线码一区| 亚洲成av人片在线播放无| 人人妻,人人澡人人爽秒播| 美女xxoo啪啪120秒动态图 | www.999成人在线观看| 成人av在线播放网站| 精品久久久久久久人妻蜜臀av| 99热6这里只有精品| 国内精品久久久久精免费| 我的老师免费观看完整版| 99久久精品热视频| 午夜老司机福利剧场| 日本一本二区三区精品| 久久久久久九九精品二区国产| 亚洲综合色惰| 青草久久国产| 日日摸夜夜添夜夜添小说| 精品人妻1区二区| 在线观看美女被高潮喷水网站 | 一区二区三区高清视频在线| 国产精品自产拍在线观看55亚洲| 婷婷丁香在线五月| 波野结衣二区三区在线| 美女高潮喷水抽搐中文字幕| 三级毛片av免费| 国产探花极品一区二区| 亚洲美女视频黄频| 日韩欧美精品免费久久 | 18禁在线播放成人免费| 校园春色视频在线观看| 99视频精品全部免费 在线| 亚洲熟妇熟女久久| 麻豆av噜噜一区二区三区| 国产毛片a区久久久久| 久久久久久久久大av| 真人一进一出gif抽搐免费| 欧美潮喷喷水| 亚洲精品日韩av片在线观看| 亚洲精华国产精华精| 久久国产精品人妻蜜桃| 国产精品综合久久久久久久免费| av在线天堂中文字幕| 人妻久久中文字幕网| 麻豆成人av在线观看| 久久人人爽人人爽人人片va | 午夜福利在线观看免费完整高清在 | 日韩高清综合在线| 精品国内亚洲2022精品成人| 日本五十路高清| 国产精品自产拍在线观看55亚洲| 婷婷丁香在线五月| 亚洲电影在线观看av| 综合色av麻豆| 精品久久久久久成人av| 日本黄色视频三级网站网址| a级毛片a级免费在线| 亚洲精品456在线播放app | 我的女老师完整版在线观看| 少妇人妻精品综合一区二区 | 国内毛片毛片毛片毛片毛片| 国产久久久一区二区三区| 欧美日韩黄片免| 狠狠狠狠99中文字幕| 男人狂女人下面高潮的视频| 国产精品98久久久久久宅男小说| www.999成人在线观看| 久久99热6这里只有精品| 国产毛片a区久久久久| 亚洲av美国av| 精品无人区乱码1区二区| 欧美不卡视频在线免费观看| www.999成人在线观看| 美女高潮的动态| 在线观看免费视频日本深夜| a级毛片a级免费在线| 国产精品久久电影中文字幕| 日韩欧美 国产精品| 天美传媒精品一区二区| 校园春色视频在线观看| 人妻夜夜爽99麻豆av| 深爱激情五月婷婷| 乱码一卡2卡4卡精品| 中文字幕av成人在线电影| 日本a在线网址| 老女人水多毛片| av天堂在线播放| 18美女黄网站色大片免费观看| av专区在线播放| 午夜福利欧美成人| 男人和女人高潮做爰伦理| 国产午夜精品论理片| 国产精品一及| 最新在线观看一区二区三区| 夜夜看夜夜爽夜夜摸| 18禁在线播放成人免费| 中文在线观看免费www的网站| 国产乱人视频| 丝袜美腿在线中文| 成人一区二区视频在线观看| 美女大奶头视频| 欧美成狂野欧美在线观看| 韩国av一区二区三区四区| 婷婷六月久久综合丁香| 国产中年淑女户外野战色| 国产白丝娇喘喷水9色精品| 哪里可以看免费的av片| 特大巨黑吊av在线直播| 国产精品综合久久久久久久免费| 久久久久久久精品吃奶| 国产伦精品一区二区三区四那| 最新中文字幕久久久久| 国产成人av教育| 国产白丝娇喘喷水9色精品| 国产一区二区激情短视频| 校园春色视频在线观看| 日韩人妻高清精品专区| 啪啪无遮挡十八禁网站| 国产欧美日韩精品一区二区| 久久精品国产自在天天线| 成人av在线播放网站| 亚洲色图av天堂| 国产三级黄色录像| 久久久久精品国产欧美久久久| av天堂在线播放| 一本久久中文字幕| 日韩国内少妇激情av| 久久精品影院6| 91麻豆av在线| 国产高潮美女av| 亚洲黑人精品在线| 亚洲中文日韩欧美视频| 久久久久久久久大av| 成年免费大片在线观看| 色哟哟哟哟哟哟| а√天堂www在线а√下载| 久久久精品大字幕| 少妇丰满av| 可以在线观看的亚洲视频| 亚洲精品一卡2卡三卡4卡5卡| 国产一区二区亚洲精品在线观看| 黄色丝袜av网址大全| 99国产极品粉嫩在线观看| 日韩高清综合在线| 天天一区二区日本电影三级| 少妇的逼好多水| 免费黄网站久久成人精品 | 欧美日韩亚洲国产一区二区在线观看| 久久精品91蜜桃| 嫩草影院新地址| 免费在线观看日本一区| 一a级毛片在线观看| 国产精品美女特级片免费视频播放器| 国产老妇女一区| 99国产综合亚洲精品| 十八禁国产超污无遮挡网站| www日本黄色视频网| 午夜激情欧美在线| 熟女电影av网| 亚洲aⅴ乱码一区二区在线播放| 国内精品久久久久精免费| 精品国产三级普通话版| 欧美丝袜亚洲另类 | 精品久久久久久久久av| 色尼玛亚洲综合影院| 午夜福利在线在线| 毛片女人毛片| 看十八女毛片水多多多| 黄色视频,在线免费观看| 天堂网av新在线| 午夜a级毛片| 很黄的视频免费| 身体一侧抽搐| 性插视频无遮挡在线免费观看| 91九色精品人成在线观看| АⅤ资源中文在线天堂| 亚洲美女搞黄在线观看 | 国产爱豆传媒在线观看| 在线观看午夜福利视频| 两性午夜刺激爽爽歪歪视频在线观看| 久久久久久大精品| 九色国产91popny在线| 男女下面进入的视频免费午夜| 97超级碰碰碰精品色视频在线观看| 久久精品91蜜桃| 亚洲aⅴ乱码一区二区在线播放| 9191精品国产免费久久| 色哟哟·www| 中文在线观看免费www的网站| 日韩中字成人| aaaaa片日本免费| 每晚都被弄得嗷嗷叫到高潮| 国模一区二区三区四区视频| 757午夜福利合集在线观看| 国产精品自产拍在线观看55亚洲| av专区在线播放| 亚洲,欧美精品.| 中文字幕免费在线视频6| 免费看a级黄色片| 亚洲人成电影免费在线| 午夜福利在线观看免费完整高清在 | 欧美日本视频| 国产黄a三级三级三级人| 午夜久久久久精精品| 一级a爱片免费观看的视频| bbb黄色大片| 身体一侧抽搐| 久久久久九九精品影院| 国产白丝娇喘喷水9色精品| 欧美日韩乱码在线| 国产精品不卡视频一区二区 | 日韩精品中文字幕看吧| 制服丝袜大香蕉在线| 亚洲av中文字字幕乱码综合| 日本精品一区二区三区蜜桃| 欧美国产日韩亚洲一区| www日本黄色视频网| 桃色一区二区三区在线观看| 亚洲专区中文字幕在线| 麻豆成人午夜福利视频| 亚洲电影在线观看av| 日本 欧美在线| 成人高潮视频无遮挡免费网站| 极品教师在线免费播放| 亚洲 欧美 日韩 在线 免费| 老鸭窝网址在线观看| 色5月婷婷丁香| 琪琪午夜伦伦电影理论片6080| 又黄又爽又刺激的免费视频.| 精品一区二区免费观看| 国产久久久一区二区三区| 婷婷色综合大香蕉| 久久精品国产99精品国产亚洲性色| 久久久久亚洲av毛片大全| 好男人在线观看高清免费视频| 全区人妻精品视频| 国产精品久久视频播放| 欧美不卡视频在线免费观看| 久久6这里有精品| 欧美日韩国产亚洲二区| 国产一区二区三区在线臀色熟女| 小蜜桃在线观看免费完整版高清| 国产精品日韩av在线免费观看| 亚洲三级黄色毛片| 亚洲精品色激情综合| 老师上课跳d突然被开到最大视频 久久午夜综合久久蜜桃 | bbb黄色大片| 午夜两性在线视频| 18禁裸乳无遮挡免费网站照片| 国产黄片美女视频| 啪啪无遮挡十八禁网站| 亚洲色图av天堂| 91久久精品国产一区二区成人| 国内精品一区二区在线观看| 国产高清有码在线观看视频| 国产探花极品一区二区| а√天堂www在线а√下载| 国产免费男女视频| 超碰av人人做人人爽久久| 啦啦啦韩国在线观看视频| 亚州av有码| 日本一本二区三区精品| 亚洲自偷自拍三级| 国产在线精品亚洲第一网站| 88av欧美| 精品国内亚洲2022精品成人| 少妇的逼好多水| 欧美潮喷喷水| 国产精品日韩av在线免费观看| 丁香六月欧美| 午夜福利免费观看在线| 波多野结衣巨乳人妻| 丰满乱子伦码专区| 亚洲午夜理论影院| 舔av片在线| 久久久久免费精品人妻一区二区| 免费观看人在逋| 欧美绝顶高潮抽搐喷水| 亚洲av熟女| 婷婷亚洲欧美| 最近最新免费中文字幕在线| 欧美区成人在线视频| 亚洲欧美清纯卡通| 身体一侧抽搐| 久99久视频精品免费| 国产高潮美女av| 可以在线观看的亚洲视频| 好男人电影高清在线观看| 可以在线观看的亚洲视频| 91午夜精品亚洲一区二区三区 | 国产午夜精品论理片| 在线观看美女被高潮喷水网站 | 露出奶头的视频| 亚洲中文日韩欧美视频| 黄色视频,在线免费观看| 成人永久免费在线观看视频| 精品免费久久久久久久清纯| 免费无遮挡裸体视频| 一区二区三区免费毛片| 亚洲 欧美 日韩 在线 免费| 久久久国产成人免费| 色哟哟哟哟哟哟| 精品熟女少妇八av免费久了| 国产精品影院久久| 成年女人毛片免费观看观看9| 亚洲国产精品sss在线观看| 中出人妻视频一区二区| 国产不卡一卡二| 国产精品永久免费网站| 宅男免费午夜| 日日夜夜操网爽| 露出奶头的视频| 国产精品亚洲美女久久久| 天美传媒精品一区二区| 国产精品98久久久久久宅男小说| 国产精华一区二区三区| 免费无遮挡裸体视频| 国产精品自产拍在线观看55亚洲| 色5月婷婷丁香| 日韩欧美免费精品| 精品久久久久久久人妻蜜臀av| 国产精品免费一区二区三区在线| 国产精品一区二区免费欧美| 国产一区二区亚洲精品在线观看| 亚洲一区二区三区不卡视频| 亚洲国产精品成人综合色| 欧美日韩综合久久久久久 | 国产成人欧美在线观看| eeuss影院久久| 国产久久久一区二区三区| 国产精品,欧美在线| 看免费av毛片| 国产精品精品国产色婷婷| 国产精品99久久久久久久久| 亚洲精品影视一区二区三区av| 夜夜看夜夜爽夜夜摸| 成人av在线播放网站| 日本五十路高清| 老司机福利观看| 91麻豆精品激情在线观看国产| 又黄又爽又刺激的免费视频.| 精品久久国产蜜桃| 色5月婷婷丁香| 亚洲黑人精品在线| 欧美日韩黄片免| 热99re8久久精品国产| 亚洲真实伦在线观看| 国产精品久久久久久久久免 | 国产一区二区三区视频了| 1024手机看黄色片| 亚洲精品在线观看二区| 99久国产av精品| 男女做爰动态图高潮gif福利片| 国产色爽女视频免费观看| 亚洲内射少妇av| 亚洲成av人片在线播放无| 一区二区三区四区激情视频 | 国内精品久久久久久久电影| 一a级毛片在线观看| 久久人妻av系列| 变态另类丝袜制服| 日韩国内少妇激情av| 成人无遮挡网站| 国产精品综合久久久久久久免费| 一级av片app| 亚洲av.av天堂| 国产激情偷乱视频一区二区| 亚洲av第一区精品v没综合| 国产精品1区2区在线观看.| 久久九九热精品免费| 国产精品影院久久| 别揉我奶头 嗯啊视频| 国产av不卡久久| 在线观看舔阴道视频| 毛片一级片免费看久久久久 | 亚洲欧美日韩无卡精品| 国产在视频线在精品| 久久久久久国产a免费观看| 99国产精品一区二区三区| www.www免费av| 国产乱人视频| 欧美日韩亚洲国产一区二区在线观看| 天堂动漫精品| 搞女人的毛片| 免费观看的影片在线观看| 久久久久亚洲av毛片大全| 99热这里只有精品一区| 九色成人免费人妻av| 久久久久免费精品人妻一区二区| 97热精品久久久久久| 国内少妇人妻偷人精品xxx网站| 国产单亲对白刺激| 亚洲av美国av| 欧美+日韩+精品| 欧美xxxx黑人xx丫x性爽| 国产高清视频在线播放一区| 蜜桃亚洲精品一区二区三区| 亚洲自偷自拍三级| 特级一级黄色大片| 青草久久国产| 亚洲国产精品sss在线观看| 最近最新中文字幕大全电影3| 欧美性猛交黑人性爽| 老熟妇乱子伦视频在线观看| 国产真实乱freesex| 久久国产乱子免费精品| 最近最新中文字幕大全电影3| or卡值多少钱| 黄色日韩在线| 国产中年淑女户外野战色| 搡女人真爽免费视频火全软件 | 在线看三级毛片| 精品一区二区免费观看| 免费在线观看成人毛片| 久久久成人免费电影| 赤兔流量卡办理| 久久亚洲真实| 嫩草影视91久久| 久久精品国产亚洲av天美| 欧美一区二区国产精品久久精品| 国产乱人伦免费视频| 精品人妻熟女av久视频| 国产高清激情床上av| 日日夜夜操网爽| 久久久久久久精品吃奶| 午夜福利高清视频| 亚洲久久久久久中文字幕| 国产一区二区在线av高清观看| 免费看光身美女| 好男人在线观看高清免费视频| 97人妻精品一区二区三区麻豆| 最近最新中文字幕大全电影3| 99国产综合亚洲精品| 九九在线视频观看精品| 国产69精品久久久久777片| 国产91精品成人一区二区三区| 亚洲成av人片在线播放无| 最后的刺客免费高清国语| 亚洲精品一区av在线观看| 国产成人啪精品午夜网站| 欧美日韩中文字幕国产精品一区二区三区| 黄色日韩在线| 97超级碰碰碰精品色视频在线观看| 宅男免费午夜| 内射极品少妇av片p| 给我免费播放毛片高清在线观看| 91av网一区二区| 国产探花在线观看一区二区| 国产精品久久久久久人妻精品电影| 亚洲专区中文字幕在线| 直男gayav资源| 90打野战视频偷拍视频| 九九在线视频观看精品| 欧美中文日本在线观看视频| 久久人人爽人人爽人人片va | 一级毛片久久久久久久久女| 国产一区二区三区视频了| 精品日产1卡2卡| 有码 亚洲区| 国产精品1区2区在线观看.| 免费在线观看成人毛片| 亚洲av美国av| 黄色配什么色好看| 无人区码免费观看不卡| 国产精品,欧美在线| 搞女人的毛片| 成人av在线播放网站| 草草在线视频免费看| 免费av观看视频| 禁无遮挡网站| 中文字幕人成人乱码亚洲影| 成人精品一区二区免费| 18禁裸乳无遮挡免费网站照片| 深夜a级毛片| 窝窝影院91人妻| 18美女黄网站色大片免费观看| 欧美日本亚洲视频在线播放| 日韩大尺度精品在线看网址| 69av精品久久久久久| 波多野结衣高清无吗| 日本在线视频免费播放| 舔av片在线| 亚洲一区二区三区色噜噜| 99热这里只有精品一区| 国产精品精品国产色婷婷| 永久网站在线| 内地一区二区视频在线| 18禁在线播放成人免费| 成人av一区二区三区在线看| 日韩欧美在线二视频| 欧美性感艳星| 一区二区三区高清视频在线| 又爽又黄a免费视频| 嫩草影院新地址| 成人国产一区最新在线观看| 一本精品99久久精品77| 两个人视频免费观看高清| 此物有八面人人有两片| 亚洲在线自拍视频| 欧美黑人巨大hd| 国产午夜精品久久久久久一区二区三区 | 国产精品精品国产色婷婷| 亚洲一区二区三区色噜噜| 国产久久久一区二区三区| 亚洲av一区综合| 中文字幕av成人在线电影| 真实男女啪啪啪动态图| 亚洲七黄色美女视频| 久久欧美精品欧美久久欧美| 国产色爽女视频免费观看| 亚洲国产精品成人综合色|