我试图通过创建只具有纯虚方法的类来使用类似C++ java/C#的接口,如下所示:(这只是一个示例)
class IMyInterface
{
public:
virtual int someFunc() = 0;
virtual ~IMyInterface() {}
};一切都很好,直到我不得不实现一个在IMyInterface数组中交换两个元素的方法,因为在C++中不允许实例化一个接口,因为编译器会抱怨temp没有实现someFunc()。
void Exchange(IMyInterface* array, int i, int j)
{
IMyInterface temp = array[i]; // not allowed
array[i] = array[j];
array[j] = temp;
}所以我不得不改变接口类的定义,去掉纯虚函数,并提供一个方法的“默认”实现,如下所示:
class IMyInterface
{
public:
virtual int someFunc()
{
return 0;
}
virtual ~IMyInterface() {}
};问题是IMyInterface不再是一个接口了,它不会强制从它继承的任何类来实现someFunc()。
不管怎样,围绕这件事?
发布于 2013-02-19 13:58:18
接口不是完全定义的对象,因此不能创建它们的实例。它们的大小和结构未定义,因此显然不能在值上下文中创建或使用它们。然而,您可以创建指向接口的指针(快乐的家伙?)因为指向对象的指针定义得非常好。示例代码可以变成:
void Exchange(IMyInterface** array, int i, int j)
{
IMyInterface* temp = array[i]; // allowed :)
array[i] = array[j];
array[j] = temp;
}https://stackoverflow.com/questions/14950784
复制相似问题