Setelah menghabiskan cukup banyak waktu untuk mengembangkan C #, saya perhatikan bahwa jika Anda mendeklarasikan kelas abstrak untuk tujuan menggunakannya sebagai antarmuka, Anda tidak dapat membuat contoh vektor kelas abstrak ini untuk menyimpan instance kelas anak.
#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;
};
Baris yang mendeklarasikan vektor kelas abstrak menyebabkan kesalahan ini di MS VS2005:
error C2259: 'IFunnyInterface' : cannot instantiate abstract class
Saya melihat solusi yang jelas, yaitu mengganti IFunnyInterface dengan yang berikut:
class IFunnyInterface
{
public:
virtual void IamFunny()
{
throw new std::exception("not implemented");
}
};
Apakah ini solusi yang dapat diterima C ++ bijaksana? Jika tidak, apakah ada pustaka pihak ketiga seperti boost yang dapat membantu saya mengatasi masalah ini?
Terima kasih telah membaca ini!
Anthony