Đã dành khá nhiều thời gian để phát triển trong C #, tôi nhận thấy rằng nếu bạn khai báo một lớp trừu tượng với mục đích sử dụng nó làm giao diện, bạn không thể khởi tạo một vectơ của lớp trừu tượng này để lưu trữ các thể hiện của các lớp con.
#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;
};
Dòng khai báo vectơ của lớp trừu tượng gây ra lỗi này trong MS VS2005:
error C2259: 'IFunnyInterface' : cannot instantiate abstract class
Tôi thấy một cách giải quyết rõ ràng, đó là thay thế IFunnyInterface bằng như sau:
class IFunnyInterface
{
public:
virtual void IamFunny()
{
throw new std::exception("not implemented");
}
};
Đây có phải là một cách giải quyết chấp nhận được C ++ khôn ngoan không? Nếu không, có thư viện nào của bên thứ ba như boost có thể giúp tôi giải quyết vấn đề này không?
Cảm ơn vì đã đọc nó !
Anthony