代码:
#include <vector>
template<typename Point, typename Arc>
class Graph
{
typedef std::vector<Point> Points;
typedef std::vector<Arc> Arcs;
Points points_;
Arcs arcs_;
public:
void addPoint( const Point& p )
{
points_.push_back( p );
}
void addArc( const Arc& a )
{
arcs_.push_back( a );
}
};
class Atom {};
class Liaison {};
typedef Graph<Atom, Liaison> Molecule;
class Post {};
class Lien {};
class Reseaux : public Graph<Post, Lien>
{};
int wmain()
{
Molecule m;
m.addPoint( Atom() );
m.addArc( Liaison() );
Reseaux r;
r.addPoint( Post() );
r.addArc( Lien() );
// r.addPoint( Atom() ); compile error
return 0;
}
btw: dynamic_cast的前提是虚函数,而不是虚析构函数,虽然有虚函数最好有虚析构函数。