c++ - C++ 中的空指针

标签 c++

我了解到模板相当于 C++ 中的 void* 等价物。这是真的吗?

当我有 EventType 变量并且我可能还需要传递与该事件相关的原始数据时,我在轮询某些过程的“事件”时遇到此问题。

struct WindowEvent {
    enum Type {WINDOW_SIZE_CHANGE, USER_CLICK, ...};

    void* data;
};

然后,用户可以根据事件类型将数据转换为必要的类型。

这种方法在 C++ 中可行吗?有没有更好的方法?

最佳答案

在通常缺乏对多态性的支持的 C 中,void* 指针可用于接受任何类型的数据,以及实际类型的一些运行时表示,或者只是知道数据将被转换回正确的类型。

在 C++ 和其他支持多态性的语言中,通常会使用动态多态性(具有虚函数的类)或静态多态性(函数重载和模板)。

主要区别在于 C 方法产生动态(运行时)手动类型检查,而 C++ 方法产生主要静态(编译时)和全自动类型检查。这意味着花在测试和寻找可轻松预防的愚蠢错误上的时间更少。成本是更冗长的代码,这意味着在某处存在代码大小偏移,在该偏移下,C 方法可能会决定生产力,而在该偏移之上,C++ 方法可能会占据主导地位。

关于c++ - C++ 中的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34467753/

相关文章:

c++ - 使用 CPP 标志从一个源文件创建多个目标文件

c++ - 查找图的最小割/最大流量

c++ - Qwtslider 布局 - 显示当前值

c++ - 在 Visual Studio C++ 中访问程序数据库时出错

C++ RGB 图像数据叠加到二维数组中( vector 的 vector )

c++ - opencv 匹配器 bad_alloc + 不正确的库依赖项?

c++ - C++ 中是否有任何方法可以执行 round(a, n) ?

C++子级在复制构造函数和输出之间的某个时刻更改父级成员

c++ - 如何在 cmake 生成的 visual studio 项目中包含目录?

c++ - OpenCV 上的简单 SIFT 检测器问题