Dominion card game - how can I take advantage of interfaces?
Is there any reason why View itself can't be a template?

template &lt;typename T&gt; class View {
public:
  View(const std::vector&lt;T&gt;&amp; items, int window_starty, int window_startx);
  virtual ~View() { }

  const T&amp; CurrentItem() const;
  // ...
  const std::vector&lt;T&gt;&amp; items_;
  // ...
};

View&lt;Card&gt; hand_view = new View&lt;Card&gt;(hand, starty, startx);