Re[2]: visitor
От: Sm0ke Россия ksi
Дата: 04.10.06 09:51
Оценка:
Одна из реализаций паттерна visitor:

проверено на компиляторе виз. студ.

файл 'visitor.h'
#pragma once

template <class V>
class visitor
{
public:
    template <class T>
    class action
    {
    protected:
        typedef V V;
        typedef T T;
    public:
        static void do_action(V & v, T & target);
    };

    template <class T>
    void operator ()(T & target)
    {
        action<T>::do_action(*static_cast<V *>(this), target);
    }
};


файл 'test_visitor.cpp'
#include "stdafx.h"

#include <iostream>

#include "visitor.h"

class some_visitor :
    public visitor<some_visitor>
{};

class something
{};

void some_visitor::action<something>::do_action(V & v, T & target)
{
    std::wcout << __FUNCTIONW__ << std::endl;
}

void test_visitor()
{
    some_visitor    v;
    something        target;
    v(target);
}


Это упрощённый вариант, работает без виртуальности...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.