Pourquoi ne pouvons-nous pas déclarer un std::vector<AbstractClass>?

Avoir passé un certain temps à développer en C#, j'ai remarqué que si vous déclarez une classe abstraite pour le but de l'utiliser comme une interface vous ne peut pas instancier un vecteur de cette classe abstraite pour stocker les instances des classes d'enfants.

#pragma once
#include <iostream>
#include <vector>

using namespace std;

class IFunnyInterface
{
public:
    virtual void IamFunny()  = 0;
};

class FunnyImpl: IFunnyInterface
{
public:
    virtual void IamFunny()
    {
        cout << "<INSERT JOKE HERE>";
    }
};

class FunnyContainer
{
private:
    std::vector <IFunnyInterface> funnyItems;
};

La ligne de déclarer le vecteur de la classe abstraite causes de cette erreur dans MS VS2005:

error C2259: 'IFunnyInterface' : cannot instantiate abstract class

Je vois une solution évidente, qui est de remplacer IFunnyInterface avec les éléments suivants:

class IFunnyInterface
{
public:
    virtual void IamFunny()
    {
        throw new std::exception("not implemented");
    }
};

Est-ce une solution acceptable C++ sage ?
Si non, est-il un tiers de la bibliothèque comme boost qui pourrait m'aider à contourner ce problème ?

Je vous remercie pour la lecture de ce !

Anthony

InformationsquelleAutor BlueTrin | 2010-01-29