亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? visitor.h

?? 和modern c++ design 這本書配套的程序庫。可以從作者的網站上免費下載。
?? H
字號:
////////////////////////////////////////////////////////////////////////////////
// The Loki Library
// Copyright (c) 2001 by Andrei Alexandrescu
// This code accompanies the book:
// Alexandrescu, Andrei. "Modern C++ Design: Generic Programming and Design 
//     Patterns Applied". Copyright (c) 2001. Addison-Wesley.
// Permission to use, copy, modify, distribute and sell this software for any 
//     purpose is hereby granted without fee, provided that the above copyright 
//     notice appear in all copies and that both that copyright notice and this 
//     permission notice appear in supporting documentation.
// The author or Addison-Welsey Longman make no representations about the 
//     suitability of this software for any purpose. It is provided "as is" 
//     without express or implied warranty.
////////////////////////////////////////////////////////////////////////////////

// Last update: June 20, 2001

#ifndef VISITOR_INC_
#define VISITOR_INC_

#include "Typelist.h"
#include "HierarchyGenerators.h"

namespace Loki
{

////////////////////////////////////////////////////////////////////////////////
// class template BaseVisitor
// The base class of any Acyclic Visitor
////////////////////////////////////////////////////////////////////////////////

    class BaseVisitor
    {
    public:
        virtual ~BaseVisitor() {}
    };
    
////////////////////////////////////////////////////////////////////////////////
// class template Visitor
// The building block of Acyclic Visitor
////////////////////////////////////////////////////////////////////////////////

    template <class T, typename R = void>
    class Visitor
    {
    public:
        typedef R ReturnType;
        virtual ReturnType Visit(T&) = 0;
    };
    
////////////////////////////////////////////////////////////////////////////////
// class template Visitor (specialization)
// This specialization is not present in the book. It makes it easier to define
// Visitors for multiple types in a shot by using a typelist. Example:
//
// class SomeVisitor : 
//     public BaseVisitor // required
//     public Visitor<TYPELIST_2(RasterBitmap, Paragraph)>, 
//     public Visitor<Paragraph>
// {
// public:
//     void Visit(RasterBitmap&); // visit a RasterBitmap
//     void Visit(Paragraph &);   // visit a Paragraph
// };
////////////////////////////////////////////////////////////////////////////////

    template <class Head, class Tail, typename R>
    class Visitor<Typelist<Head, Tail>, R>
        : public Visitor<Head, R>, public Visitor<Tail, R>
    {
    public:
        typedef R ReturnType;
       // using Visitor<Head, R>::Visit;
       // using Visitor<Tail, R>::Visit;
    };
    
    template <class Head, typename R>
    class Visitor<Typelist<Head, NullType>, R> : public Visitor<Head, R>
    {
    public:
        typedef R ReturnType;
        using Visitor<Head, R>::Visit;
    };

////////////////////////////////////////////////////////////////////////////////
// class template BaseVisitorImpl
// Implements non-strict visitation (you can implement only part of the Visit
//     functions)
////////////////////////////////////////////////////////////////////////////////

    template <class TList, typename R = void> class BaseVisitorImpl;

    template <class Head, class Tail, typename R>
    class BaseVisitorImpl<Typelist<Head, Tail>, R>
        : public Visitor<Head, R>
        , public BaseVisitorImpl<Tail, R>
    {
    public:
       // using BaseVisitorImpl<Tail, R>::Visit;

        virtual R Visit(Head&)
        { return R(); }
    };
    
    template <class Head, typename R>
    class BaseVisitorImpl<Typelist<Head, NullType>, R>
        : public Visitor<Head, R>
    {
    public:
        virtual R Visit(Head&)
        { return R(); }
    };
    
////////////////////////////////////////////////////////////////////////////////
// class template BaseVisitable
////////////////////////////////////////////////////////////////////////////////

template <typename R, typename Visited>
struct DefaultCatchAll
{
    static R OnUnknownVisitor(Visited&, BaseVisitor&)
    { return R(); }
};

////////////////////////////////////////////////////////////////////////////////
// class template BaseVisitable
////////////////////////////////////////////////////////////////////////////////

    template 
    <
        typename R = void, 
        template <typename, class> class CatchAll = DefaultCatchAll
    >
    class BaseVisitable
    {
    public:
        typedef R ReturnType;
        virtual ~BaseVisitable() {}
        virtual ReturnType Accept(BaseVisitor&) = 0;
        
    protected: // give access only to the hierarchy
        template <class T>
        static ReturnType AcceptImpl(T& visited, BaseVisitor& guest)
        {
            // Apply the Acyclic Visitor
            if (Visitor<T>* p = dynamic_cast<Visitor<T>*>(&guest))
            {
                return p->Visit(visited);
            }
            return CatchAll<R, T>::OnUnknownVisitor(visited, guest);
        }
    };

////////////////////////////////////////////////////////////////////////////////
// macro DEFINE_VISITABLE
// Put it in every class that you want to make visitable (in addition to 
//     deriving it from BaseVisitable<R>
////////////////////////////////////////////////////////////////////////////////

#define DEFINE_VISITABLE() \
    virtual ReturnType Accept(BaseVisitor& guest) \
    { return AcceptImpl(*this, guest); }

////////////////////////////////////////////////////////////////////////////////
// class template CyclicVisitor
// Put it in every class that you want to make visitable (in addition to 
//     deriving it from BaseVisitable<R>
////////////////////////////////////////////////////////////////////////////////

    template <typename R, class TList>
    class CyclicVisitor : public Visitor<TList, R>
    {
    public:
        typedef R ReturnType;
        // using Visitor<TList, R>::Visit;
        
        template <class Visited>
        ReturnType GenericVisit(Visited& host)
        {
            Visitor<Visited, ReturnType>& subObj = *this;
            return subObj.Visit(host);
        }
    };
    
////////////////////////////////////////////////////////////////////////////////
// macro DEFINE_CYCLIC_VISITABLE
// Put it in every class that you want to make visitable by a cyclic visitor
////////////////////////////////////////////////////////////////////////////////

#define DEFINE_CYCLIC_VISITABLE(SomeVisitor) \
    virtual SomeVisitor::ReturnType Accept(SomeVisitor& guest) \
    { return guest.GenericVisit(*this); }

} // namespace Loki

////////////////////////////////////////////////////////////////////////////////
// Change log:
// March 20: add default argument DefaultCatchAll to BaseVisitable
// June 20, 2001: ported by Nick Thurn to gcc 2.95.3. Kudos, Nick!!!
////////////////////////////////////////////////////////////////////////////////

#endif // VISITOR_INC_

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产福利精品一区二区| 91.麻豆视频| 午夜在线成人av| 中文字幕免费一区| 99久久精品国产精品久久 | 欧美大片一区二区| va亚洲va日韩不卡在线观看| 亚洲欧美激情小说另类| 7777女厕盗摄久久久| 国产精品一级二级三级| 亚洲成av人综合在线观看| 中文字幕av一区二区三区免费看| 91免费精品国自产拍在线不卡| 奇米一区二区三区av| 国产一区二区按摩在线观看| 青草av.久久免费一区| 久久精品人人做人人爽97| 91久久精品午夜一区二区| 国产精品88av| 色综合天天综合网天天看片| 国产精品亚洲第一| 精品无人区卡一卡二卡三乱码免费卡| 亚洲午夜久久久久久久久电影院| 国产人成一区二区三区影院| 久久一夜天堂av一区二区三区| 9191久久久久久久久久久| 日本黄色一区二区| 欧美天堂亚洲电影院在线播放| jlzzjlzz欧美大全| 99国产欧美久久久精品| 成人高清伦理免费影院在线观看| 国产乱色国产精品免费视频| 国产一区 二区| 懂色中文一区二区在线播放| 国产福利视频一区二区三区| 成人深夜福利app| 成人av网站在线观看| 日本乱人伦aⅴ精品| 欧美一区二区三区人| 亚洲男女一区二区三区| 视频一区视频二区中文字幕| 国产乱人伦偷精品视频免下载| 国产99久久精品| 欧美视频一区在线观看| 精品国产1区二区| 亚洲欧美一区二区视频| 天堂一区二区在线免费观看| 久久精品国产77777蜜臀| 国产成人综合自拍| 91精品国产美女浴室洗澡无遮挡| 日韩一区和二区| 亚洲美女在线国产| 国产91精品一区二区麻豆亚洲| 欧美日韩久久不卡| 亚洲丝袜精品丝袜在线| 国产在线乱码一区二区三区| 色噜噜夜夜夜综合网| 欧美高清在线精品一区| 国产一区二区在线影院| 欧美亚州韩日在线看免费版国语版| 91精品国产综合久久精品| 国产精品女同一区二区三区| 黄色小说综合网站| 精品三级av在线| 日本不卡视频一二三区| 欧美伊人久久久久久久久影院 | 国产精品私人自拍| 国产精品99久久不卡二区| 精品国产不卡一区二区三区| 午夜精品久久久久久久久久| 欧美性一二三区| 首页欧美精品中文字幕| 在线播放欧美女士性生活| 亚洲一区二区三区美女| 色偷偷88欧美精品久久久| 亚洲夂夂婷婷色拍ww47| 欧美高清hd18日本| 九九精品视频在线看| 欧美国产日韩精品免费观看| 成人视屏免费看| 一区二区高清视频在线观看| 欧美日韩在线一区二区| 日本不卡一区二区| 久久午夜老司机| 色呦呦一区二区三区| 日韩精品久久久久久| 国产亚洲欧美在线| 欧美少妇一区二区| 国产精品一区二区不卡| 亚洲自拍另类综合| 国产婷婷色一区二区三区 | 高清成人在线观看| 亚洲精品免费看| 久久品道一品道久久精品| 91免费视频观看| 国产一区二区三区精品欧美日韩一区二区三区| 久久久久国产精品厨房| 欧美日韩国产高清一区| 国产91精品精华液一区二区三区| 久色婷婷小香蕉久久| 国产精品国产三级国产三级人妇| 欧美人妇做爰xxxⅹ性高电影| 国产a区久久久| 午夜国产不卡在线观看视频| 中文字幕日韩av资源站| 欧美激情在线免费观看| 日韩欧美视频一区| 欧美日韩国产123区| 色婷婷av一区| 99久久国产综合精品麻豆| 国产69精品一区二区亚洲孕妇| 免费看欧美美女黄的网站| 亚洲高清不卡在线| 亚洲国产日韩a在线播放性色| 亚洲激情图片一区| 一区二区三区不卡在线观看 | 精品国产乱码久久久久久浪潮| 9191成人精品久久| 日韩亚洲欧美成人一区| 欧美一区二区三区在线视频| 日韩美女天天操| 久久先锋影音av鲁色资源| 国产精品国产三级国产三级人妇| 亚洲色图欧美在线| 蜜桃av一区二区| 不卡大黄网站免费看| 884aa四虎影成人精品一区| 精品国产免费一区二区三区香蕉| 国产嫩草影院久久久久| 亚洲国产日韩一级| 国产精品一卡二卡在线观看| 成人av先锋影音| 日韩免费高清av| 亚洲精品视频观看| 久久99精品久久久久久久久久久久| 国产aⅴ综合色| 日韩欧美一区二区在线视频| 国产精品欧美经典| 奇米色一区二区| 欧美精品 国产精品| 国产精品美女久久久久久2018| 日韩av成人高清| 欧美三区在线观看| 亚洲精品乱码久久久久久久久 | 日本不卡1234视频| 91久久线看在观草草青青| 国产欧美日韩三级| 精品综合免费视频观看| 成人av资源站| 国产亚洲精久久久久久| 日韩高清在线不卡| 在线观看日韩精品| 中文欧美字幕免费| 国产剧情av麻豆香蕉精品| 欧美精品在线一区二区| 亚洲色图在线视频| 成人午夜在线视频| 欧美成人在线直播| 奇米色777欧美一区二区| 欧洲国内综合视频| 亚洲免费色视频| 99国产一区二区三精品乱码| 久久精品一区二区三区av| 中文字幕一区视频| av成人老司机| 亚洲人成网站在线| 99久久久精品免费观看国产蜜| 亚洲国产成人自拍| 日韩中文字幕麻豆| 日韩精品一区二区三区中文精品| 成人午夜激情视频| 亚洲靠逼com| 制服丝袜av成人在线看| 狠狠狠色丁香婷婷综合久久五月| 精品免费国产二区三区| 国产69精品久久777的优势| 亚洲丝袜美腿综合| 欧美夫妻性生活| 国产精品主播直播| 亚洲欧美另类综合偷拍| 日韩午夜在线观看视频| 国产精品主播直播| 亚洲综合偷拍欧美一区色| 欧美成人女星排名| 色域天天综合网| 国产一区二区三区免费观看| 国产精品成人一区二区艾草 | 精品少妇一区二区三区在线播放| 成人免费三级在线| 亚洲福利视频一区| 国产精品不卡一区二区三区| 欧美一区二区三区啪啪| 国产精品一区二区视频| 亚洲国产美女搞黄色| 国产精品青草综合久久久久99| 欧美一区二区三级| 欧美亚洲一区二区在线| 在线观看成人小视频| 高清不卡在线观看| 激情文学综合网|