Re: compile error C2555
От: Анатолий Широков СССР  
Дата: 21.11.03 15:52
Оценка:
Есть такой шаблон проектирования "визитер":

/////////////////////////////////////////////////////
//  модель
//
class Integer;
class String;

class Visitor
{
public:
    virtual void Process(Integer &) = 0;
    virtual void Process(String &) = 0;
}; // class Visitor..

class Base
{
public:
    virtual ~Base() {}
    
    virtual void Visit(Visitor &) = 0;
}; // class Base..

class Integer : public Base
{
    int value_;

public: // конструкторы

    Integer(int value) :
       value_(value)
    {
    }

public: // селекторы

    int Get() const 
    {
        return value_; 
    }

public: // переопределение поведения

    virtual void Visit(Visitor &v)
    {
        v.Process(*this);
    }
}; // class Integer : public Base..

class String : public Base
{
    std::string value_;

public: // конструкторы

    String(const std::string& value) :
       value_(value)
    {
    }

public: // селекторы

    cosnt std::string& Get() const 
    {
        return value_; 
    }

public: // переопределение поведения

    virtual void Visit(Visitor &v)
    {
        v.Process(*this);
    }
}; // class String..

/////////////////////////////////////////////////
// приложение
//
class Total : public Visitor
{
    int total_;

public: // конструкторы

    Total() : total_(0) {}

public: // селекторы

    int Get() const {return total_;}

public: // переопределение поведения

    void Process(Integer &v)
    {
        total_ += v.Get();
    }

    void Process(String &)  {}
};

void main()
{
   list<Base*> lst;

   lst.push_back(new Integer(1));
   lst.push_back(new String("something"));

   Total total;

   for(list<A*>::iterator it = lst.begin(); it != lst.end(); it++)
      (*it).Process(total);

   std::cout << "Total :" << total.Get();
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.