[CodePractice]使用数据本身的信息

sum:

如果一个信息是包含在数据中的,那么即便读取这个信息要多谢两行代码,但是还是应该直接去使用它,而不是通过记忆来获得和保持一致。

这样更简洁,更具扩展性。

而记忆方式在代码量达到一定程度之后会带来质变级的脑力负担和出错几率。

details:

昨天出现的一个错误就是搞错了render target的size。

本身的实现大致是这样:

//config
RenderTargetSize size;
xxxxSize size0;
xxxxSize size1;

//init
RenderTarget* rt = CreateRenderTarget(size.x, size.y, format);

//in another function
vector<u16> data;
data.resize(size.x*size.y);//then read data

从简单例子看没有问题,但是如果size的数量多到一定程度之后,就会很容易出错。

我就中招了。

结果使用了另外一个含义非常像的size。

最后需要debug一段时间。

真正简洁的做法是直接从RenderTarget中拿相关的size和format信息,设计上也更具有扩展性。

这种使用一种类似约定,我知道初始化的时候是什么样的,就会让代码实现的时候容易出错,维护成本也很高。

类似的还有:

std::vector<char> a;

//这个就是容易出错而且类型本身就在a中,强记出来就不好
printf("size %d", a.size()*sizeof(char));
//通过类型来做就好多了
template<class T>
u32 VectorMemSize(const std::vector<T>& v)
{
    return sizeof(T)*v.size();
}
printf("size %d",VectorMemSize(a));

所以应该直接的使用直接蕴含在数据中的信息,而不是通过记忆等方式来确保一致。

记忆方式在代码量达到一定程度之后会带来质变级的脑力负担和出错几率。

时间: 2024-10-26 15:23:22

[CodePractice]使用数据本身的信息的相关文章

6.数据分组-统计信息

---数据分组-统计信息----- --select 字段列表from 表列表 where 对数据源进行数据筛选group by 分组字段列表Order by 排序字段列表 --1.得到所有学员总人数 select COUNT(*) from Student --2.得到男女生的人数 select COUNT(*) from Student where Sex='男' select COUNT(*) from Student where Sex='女' --使用分组统计 select COUNT

(四) 一起学 APUE 之 系统数据文件和信息

. . . . . 目录 (一) 一起学 APUE 之 标准 IO (二) 一起学 APUE 之 文件 IO (三) 一起学 APUE 之 文件和目录 (四) 一起学 APUE 之 系统数据文件和信息 1.getpwnam(3).getpwuid(3) 1 getpwnam, getpwuid - get password file entry 2 3 #include <sys/types.h> 4 #include <pwd.h> 5 6 struct passwd *getp

YUV420数据和字符信息如何利用滤镜方法进行编码?

YUV420数据和字符信息如何利用滤镜方法进行编码?我希望用ffmpeg中的filter方法,把YUV420数据和字符信息一起编码,该怎么办呢?本人目前只实现了把yuv420的数据进行h.264的编码了. 本人成功实现利用ffmpeg中的滤镜 filter功能,在码流中进行字符叠加,太不容易了!本人使用的是ffmpeg 1.0.7的代码部分代码如下://设定输出格式列表,支持PIX_FMT_YUV420P,PIX_FMT_GRAY8,PIX_FMT_RGB24//enum FFmpegPixFm

APUE学习笔记:第六章 系统数据文件和信息

6.1 引言 UNIX系统的正常运行需要使用大量与系统有关的数据文件,针对这些数据文件的可移植接口是本章的主题.本章还介绍了系统标识函数.时间和日期函数 6.2 口令文件 UNIX系统的口令文件包含了下列各字段,这些字段包含在<pwd.h>中定义的passwd结构中 用户名 char *pw_name 加密口令 char *pw_passwd 数值用户ID uid_t pw_uid 数值组ID gid_t pw_gid 注释字段 char *pw_gecos 初始工作目录 char *pw_d

《UNIX环境高级编程》--6系统数据文件和信息

系统数据文件和信息 用户配置文件 1. /etc/passwd UNIX口令文件 /etc/passwd/是一个ASCII文件,每一行包含很多字段,字段之间用冒号分隔.这些字段包含在<pwd.h>头文件定义的passwd,该结构有如下成员: char *pw_name:用户名 char *pw_passwd:加密口令 uid_t pw_uid:数值用户ID gid_t pw_gid:数值组ID char *pw_gecos:注释字段 char *pw_dir:初始工作目录 char *pw_s

Unix环境高级编程学习笔记(三):标准I/O , 系统数据文件和信息

1 标准I/O函数不同于read,write函数,是其在流上进行操作, 当首次调用标准I/O函数时,系统会首先调用malloc,为流创造缓冲区, 2 fopen函数 #include<stdio.h> file * fopen(const char* pathname, const char * restrict name); 打开返回指针,出错返回NULL, type的取指有r(读),w(写),a(追加),r+/w+(读+写),a+(读+写+追加) int fclose(file* fp)

读书笔记-APUE第三版-(6)系统数据文件和信息

常见系统数据文件 下表列出了常见的系统数据文件及其查找函数. 以/etc/passwd文件为例,读取数据的程序基本框架如下: void get_pw_entry() { struct passwd *ptr; setpwent(); while ((ptr = getpwent()) != 0) { -- } endpwent(); return ptr; } 每个数据文件都提供了一个get方法返回文件下一个记录项. set方法充值当前位置到文件开始处. end方法关闭数据文件. 表格中的get

oracle sqlldr使用(导入速度快,但对数据本身的处理功能弱)

oracle sqlldr使用(导入速度快,但对数据本身的处理功能弱) 博客分类: DB.Oracle OracleSQL sqlload.cmd Sql代码   pause sqlldr user/[email protected] control.ctl skip=1 rows=2000 bindsize=8192000 pause control.ctl Sql代码   LOAD DATA INFILE 'Rating201001.csv' APPEND INTO TABLE "TBL_S

Unix环境高级编程(四)数据系统文件和信息

本章主要介绍了Unix系统的正常运行要使用的与系统有关的数据文件和信息.如:口令文件,阴影文件.组文件.附加组.系统标识.时间和日期历程. 口令文件,即Unix系统用户数据库,存储在/etc/passwd中,是一个ASCII文件,包含的字段信息在<pwd.h>定义的passwd数据结构中. struct passwd {     char   *pw_name;       /* username */    char   *pw_passwd;     /* user password */