我使用的 API 接受 void*
在某些功能上。我经常不小心将错误的指针类型传递给函数,当然它编译得很好,但在运行时不起作用。
有没有办法禁用隐式转换为 void*
指向某个类的指针?
最佳答案
您可以为 API 函数添加已删除的重载:
// API function
void api(void* p) {
// ...
}
// Special case for nullptr
inline void api(std::nullptr_t) {
api((void*)nullptr);
}
// Everything else is disabled
template <class ...T>
void api(T&&... t) = delete;
int main() {
int i = 0;
void* p = &i;
api(p); // Compiles
// api(&i); // Doesn't compile
}
关于c++ - 有没有办法避免隐式转换为 void*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68673443/