หลังจากใช้เวลาในการพัฒนา C # อยู่พอสมควรฉันสังเกตเห็นว่าหากคุณประกาศคลาสนามธรรมเพื่อใช้เป็นอินเทอร์เฟซคุณจะไม่สามารถสร้างอินสแตนซ์เวกเตอร์ของคลาสนามธรรมนี้เพื่อเก็บอินสแตนซ์ของคลาสเด็กได้
#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;
};
บรรทัดที่ประกาศเวกเตอร์ของคลาสนามธรรมทำให้เกิดข้อผิดพลาดนี้ใน MS VS2005:
error C2259: 'IFunnyInterface' : cannot instantiate abstract class
ฉันเห็นวิธีแก้ปัญหาที่ชัดเจนซึ่งก็คือการแทนที่ IFunnyInterface ด้วยสิ่งต่อไปนี้:
class IFunnyInterface
{
public:
virtual void IamFunny()
{
throw new std::exception("not implemented");
}
};
นี่เป็นวิธีแก้ปัญหาที่ยอมรับได้ C ++ หรือไม่? ถ้าไม่มีมีไลบรารีของบุคคลที่สามเช่นบูสต์ที่สามารถช่วยฉันแก้ปัญหานี้ได้หรือไม่?
ขอบคุณที่อ่านสิ่งนี้!
แอนโธนี่