阅读他人代码学习到的一些好的设计(二)
作者:互联网
1. C++中的强制类型转换请使用 reinterpret_cast<> ;
2. 对于某个IP的owner,开发驱动时,请注意提供一个接口来返回给用户当前ip有哪些capabilities
3. 合理使用语法糖可以加快我们的开发;比如C++的lambda表达式,比如C++的auto类型推导
分别举一个例子说明这种语法糖的好处:
比如一个类的成员函数想要传递给std::thread, 或者类的成员函数作为普通函数注册给回调
typedef void (*fun_t)(frame_buffer* buffer, void* data); void display_hal_register_callback(fun_t func, void* data); class { public: Vop(string name):mName(name) {;} void register(void* data); void onRelease(frame_buffer* buffer, void* data);
void vsyncworker(Vop* vop);
void startWork(void* data); private: string mName;
std::thread* mThread = nullptr; } Vop; void Vop::onRelease(frame_buffer* buffer, void* data) { cout << mName << "onReleased" << buffer << endl; } void Vop::startWork(void* data) { auto f = [data](Vop* vop){ vop->vsyncworker(data); } mThread = new std::thread( f, this); } //想要把Vop::onRelease(), 注册到display_hal_register_callback是不行的,因为
//Vop::onRelease的类型其实是void Vop::onRelease(Vop* this, frame_buffer*, void* ) //使用std::bind void Vop::register(void* data)
{
auto f = std::bind(&Vop::onRelease, this); display_hal_register_callback(f, data);
}
比如想快速的在一个地方打开一个文件,获取一个句柄等,然后对其进行操作,但是又忘记了句柄的具体类型, 如下
auto f = fopen("xx", "wb"); if(f) { fwrite(vaddr, size, 1, f); } fclose(f);
.
标签:std,buffer,代码,Vop,阅读,onRelease,他人,data,void 来源: https://www.cnblogs.com/Arnold-Zhang/p/15795242.html