Boost logo

Boost :

From: kalin (kalin.eh_at_[hidden])
Date: 2005-01-12 21:49:33


Hi All, I've made a simple implementation of making a class non-derivable.

Aside from the pros/cons of actually using this, which I'm sure could
be debated for months, I thought I'd present the implementation anyway
to see if there is interest in it.

I thought something like this might already be in Boost, but I couldn't
locate it,
or any threads about the subject.

Usage is as:

class Foo : Sealed<Foo> {};
class Bar : Foo {}; // Error.

And it should all work as intended (unless I've missed something) and not
allow you to instantiate Bar.

--- Implementation ---
namespace Detail
{
  template <class T, class Parent>
  class Sealed
  {
    friend T;
    friend Parent;
  };
}

template <class T>
class Sealed : public virtual Detail::Sealed<T, Sealed>
{
  friend T;
};

---
kalin

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk