Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I think the visitor pattern can be a solution.</p> <p><em><strong>UPDATE</em></strong></p> <p>I finished my example:</p> <pre><code>#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;boost/shared_ptr.hpp&gt; class Animal; class Wolf; class Fish; class Visitor { public: virtual void visit(const Animal&amp; p_animal) const = 0; virtual void visit(const Wolf&amp; p_animal) const = 0; virtual void visit(const Fish&amp; p_animal) const = 0; }; template&lt;class AMOUNT&gt; class AmountVisitor : public Visitor { public: AmountVisitor(AMOUNT p_amount) : m_amount(p_amount) {} virtual void visit(const Animal&amp; p_animal) const { std::cout &lt;&lt; "I eat like a generic Animal." &lt;&lt; std::endl; } virtual void visit(const Wolf&amp; p_animal) const { std::cout &lt;&lt; "I eat like a wolf!" &lt;&lt; std::endl; } virtual void visit(const Fish&amp; p_animal) const { std::cout &lt;&lt; "I eat like a fish!" &lt;&lt; std::endl; } AMOUNT m_amount; }; class Animal { public: virtual void Accept(const Visitor&amp; p_visitor) const { p_visitor.visit(*this); } virtual ~Animal() { } }; class Wolf : public Animal { public: virtual void Accept(const Visitor&amp; p_visitor) const { p_visitor.visit(*this); } }; class Fish : public Animal { public: virtual void Accept(const Visitor&amp; p_visitor) const { p_visitor.visit(*this); } }; int main() { typedef boost::shared_ptr&lt;Animal&gt; TAnimal; std::vector&lt;TAnimal&gt; animals; animals.push_back(TAnimal(new Animal())); animals.push_back(TAnimal(new Wolf())); animals.push_back(TAnimal(new Fish())); AmountVisitor&lt;int&gt; amount(10); for (std::vector&lt;TAnimal&gt;::const_iterator it = animals.begin(); it != animals.end(); ++it) { (*it)-&gt;Accept(amount); } return 0; } </code></pre> <p>this prints:</p> <pre><code>I eat like a generic Animal. I eat like a wolf! I eat like a fish! </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload