ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-01-21 01:03:31  阅读:141  来源: 互联网

标签:std buffer 代码 Vop 阅读 onRelease 他人 data void


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有