抽象类-C++接口交换
abstract class - C++ Interfaces Exchanging
我试图通过创建只有纯虚拟方法的类来处理类似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()
。
不管怎么说?
接口不是完全定义的对象,因此无法创建它们的实例。它们具有未定义的大小和结构,因此显然无法在值上下文中创建或使用。但是,您可以创建指向接口的指针(Happy Guys?),因为指向对象的指针定义得很好。示例代码可能变成:
void Exchange(IMyInterface** array, int i, int j)
{
IMyInterface* temp = array[i]; // allowed :)
array[i] = array[j];
array[j] = temp;
}
如果操作应该通过值来完成,那么模板函数可能更合适。
相关文章:
- C++嵌套if语句,基本货币交换
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- Visual C++GC接口如何启用它以及要包含哪个库
- shell排序中的交换和比较
- Windows.h与GLFW.h的接口
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 提供与TMP和SFINAE的通用接口
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为重写std::exception的库生成swig接口时出错
- 内联如何影响模块接口中的成员函数
- 通过交换元素使数组相同
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- COM 接口 c# 封送数组数组
- 如何在 SCIP C++ 接口中获取 MILP 约束矩阵中的系数值
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 交换运算符 + 重载会导致无限递归
- (De/)序列化作为C++中基于文件的数据交换的接口
- 交换接口的实现
- 通过接口进行复制和交换
- 抽象类-C++接口交换