我了解到模板相当于 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/