阅读他人代码学习到的一些好的设计(二)


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);

相关