BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #13968同步于 2008/10/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于动态定义一个新的类型的问题

lblz
2008/10/13镜像同步12 回复
这样的,需要动态定义一个类型用以传递这个类型的参数,现在暂时还不知道它里面有哪些类型,到运行时才知道,有比void* 更好的方法吗? 又或是union?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
yywbupt机器人#1 · 2008/10/13
【 在 lblz 的大作中提到: 】 : 这样的,需要动态定义一个类型用以传递这个类型的参数,现在暂时还不知道它里面有哪些类型,到运行时才知道,有比void* 更好的方法吗? 呃,先说说看,你想把它用于什么样的场合下,为什么静态类型已经无法满足的你的要求
lblz机器人#2 · 2008/10/13
这样的,我在写一个小型数据库,需要定义记录的类型,但是在coding时我是不知道用户会定义什么样的类型,比如一个记录会定义几个int,几个char? 但是在写代码时需要用到记录的类型,比如比较查询记录的键值,我现在只好用一个union数组来代替记录内部的参数类型,C++里有没有更好的方法? 不知道说清楚没有....--
yywbupt机器人#3 · 2008/10/13
【 在 lblz 的大作中提到: 】 : 这样的,我在写一个小型数据库,需要定义记录的类型,但是在coding时我是不知道用户会定义什么样的类型,比如一个记录会定义几个int,几个char? 但是在写代码时需要用到记录的类型,比如比较查询记录的键值,我现在只好用一个union数组来代替记录内部的参数类型,C++里有没有更好的方法? 不知道说清楚没有....-- 是要实现一个数据库系统,还是说你要在你的程序里面去绑定访问一个数据库 ?
lblz机器人#4 · 2008/10/13
【 在 yywbupt 的大作中提到: 】 : 是要实现一个数据库系统,还是说你要在你的程序里面去绑定访问一个数据库 ? 实现一个小型的数据库,我做的比较低层,就做访问OS文件这一块,关于动态定义,C++里有好的方法没?
yywbupt机器人#5 · 2008/10/13
【 在 lblz 的大作中提到: 】 : 实现一个小型的数据库,我做的比较低层,就做访问OS文件这一块,关于动态定义,C++里有好的方法没? 你是要做一个类似于SQL Server,Oracle,sqlite之类的小型版本,支持SQL语句,支持用户建数据表? 还是说,用户给你一个数据库,你的任务就只是把它读到内存中,转化成一个结构或者对象供上层模块使用? 第一种还是第二种? 但总的来说,无论是哪种,总该有个地方记录用户定义的类型的信息是吧,如果是第一种,每个数据库都会为每张数据库表维护记录的模式信息,模式信息里面就记录了类型信息
lblz机器人#6 · 2008/10/13
【 在 yywbupt 的大作中提到: 】 : 你是要做一个类似于SQL Server,Oracle,sqlite之类的小型版本,支持SQL语句,支持用户建数据表? : 还是说,用户给你一个数据库,你的任务就只是把它读到内存中,转化成一个结构或者对象供上层模块使用? : 第一种还是第二种? : ................... 第一种,但是我不做上层的语法分析,只做下面的对数据库文件的读取,我们分为3个层次,我主要做存储管理,但是记录的模式信息的文件也是我维护的,但模式信息在数据库运行后再建表之后才会有用户输入,但是我现在在写页面这个类对于记录这个数据结构的查询函数,上层查询时传下来的记录的键值参数总要和页内的记录的内部属性值比较吧,不知道记录的确切类型,如何进行比较?
lblz机器人#7 · 2008/10/13
还是看代码比较容易明白我的意思: Page::SearchRecord(void* rec_key) //页面对记录的查询函数,传入参数为键值 { for(int id=0;id<head.rec_num;id++) { if(head.record_table[id]->?????) //这里head是页的头部,record_table[]是页头部维护的记录地址表,head.record_table[id]是一条记录的指针,现在不知道记录内部的类型,如何和传入的参数值进行比较? } }
yywbupt机器人#8 · 2008/10/13
【 在 lblz 的大作中提到: 】 : 还是看代码比较容易明白我的意思: : Page::SearchRecord(void* rec_key) //页面对记录的查询函数,传入参数为键值 : { : ................... 记录不都是放在表里面吗?没有表哪来的记录。每次查询难道不是先找到表,读表的模式信息,再根据表里维护的索引结构找到相应的记录的位置。有了模式信息,就可以知道字段的长度,然后起码可以一个一个字节的比较吧。况且每次你插入一条记录的时候,没有类型的信息那你怎么知道每个字段需要占多长的长度。不是很明白你代码中所谓的页面指的是什么, 难道指的是块(Block)
lblz机器人#9 · 2008/10/13
【 在 yywbupt 的大作中提到: 】 : 记录不都是放在表里面吗?没有表哪来的记录。每次查询难道不是先找到表,读表的模式信息,再根据表里维护的索引结构找到相应的记录的位置。有了模式信息,就可以知道字段的长度,然后起码可以一个一个字节的比较吧。况且每次你插入一条记录的时候,没有类型的信息那你怎么知道每个字段需要占多长的长度。不是很明白你代码中所谓的页面指的是什么, 难道指的是块(Block) 就是块的意思(我们老师说这里暂时把块和页设置同样的大小),你读取表的信息后, 1. 表维护表自身信息和模式信息,如何知道记录在哪个块? 2.然后是不是要将整个块读入内存? 3.就算是表的模式信息吧,你如何定义它? 这个也是由用户自己来定义的啊? 也是动态定义的吧?