Hi guys & girls,

I do have the following question. Let's say I have a skeleton for some functionality, which I want to implement in different ways. One way is the Template pattern, but that uses a polymorphic call to my (protected) implementation function.
Instead, I want to use a static interface using the Barton-Nackman trick. But then, if I want to store a list of these algorithm implementations in some algorithm-container class, i'm in trouble. Do I not escape from a heterogenous container with "boost::any" ?

Here's my code :

Code:
template<typename Type>
class Document
{
public:
  virtual ~Document(){}
  void open() { read(); }
  void save() { }
  void close() { }
protected:
  Type& read() { return static_cast<Type&>(this)->read(); }
};

struct latex : public Document<latex>
{
  void read(){ }
};

class Application
{
public:
  template<typename Type>
  void addDocument() { document_ = new T; } // suppose T has default constructor and is POD
  ~Application() { delete document_; } // don't bother the raw pointer..
  void OpenDocument() { document_->open(); }
protected:
  Document* document_;
};


int main()
{
  Application emacs;
  emacs.addDocument<latex>();
  emacs.OpenDocument();
  return 0;
}
Thanks for suggestions !

Mark

ps : is this the BN trick? or is this already a crtp.. i have the impression that a crtp is merely the use of the BN trick in template expressions