- 主题:C可以做泛型吗?
和语言没关系,如果编译期确定知道传输的数据结构,那没什么问题
现在是在运行时实现调用者传入一个数据,只有地址和大小,
类似proc_data (void* addr, size_t size)
这个函数又想通过数据的元素位置或者名称实现访问
需要一个和当前数据结构对应的元数据表来实现
prop_at(2),name_of(xx),offset_of(xx)
等等这一类泛化的数据项访问
【 在 dreamr 的大作中提到: 】
: 直接用c++ 有什么不妥吗?
--
FROM 120.231.170.*
25楼,用c++作一个。
【 在 dreamr 的大作中提到: 】
: 直接用c++ 有什么不妥吗?
--
FROM 221.221.50.*
非常对,就是得想办法搞清楚各个成员的参数。
【 在 hehao 的大作中提到: 】
: 和语言没关系,如果编译期确定知道传输的数据结构,那没什么问题
: 现在是在运行时实现调用者传入一个数据,只有地址和大小,
: 类似proc_data (void* addr, size_t size)
: ...................
--
FROM 221.221.50.*
指针函数,函数指针不就可以模拟c++的虚函数表吗,可以做动态绑定
【 在 ylh1969 的大作中提到: 】
: 像C++的STL?
: 有人做过,还行。
: 本版太凉快了,灌点水。
--
FROM 111.201.25.*
对,看看6楼。
【 在 bigdavidwli 的大作中提到: 】
: 指针函数,函数指针不就可以模拟c++的虚函数表吗,可以做动态绑定
:
--
FROM 221.221.50.*
可以用两个办法
一是thunk技术,分配一段可执行内存,动态生成这些访问函数
二是,生成源代码,外部调用编译器,生成so,再加载动态库
效率上:
生成速度 执行速度
高 中
低 高
【 在 ylh1969 的大作中提到: 】
: 对,看看6楼。
--
FROM 223.73.235.*
隐约记得上学的时候,老师说过
C通过 宏的方式, 可以做,甚至可以多OOP
但。。。。丑陋啊
【 在 ylh1969 的大作中提到: 】
: 像C++的STL?
: 有人做过,还行。
: 本版太凉快了,灌点水。
--
FROM 123.245.197.*
泛型中型是指类型
c++等其他语言,有编译期生成新类型的语法
比如
template<class T,bool is_A>
class SomeType;
这样定义的SomeType是一个类型集合,它由2个变量来确定具体类型
又比如支持设计编译期对生成类型的概念与约束的检测与推导机制
因此,写起来更符合人类思考顺序,也觉得方便
代价是编译器的大量类型和代码推导生成工作
以及,嵌套很深层次和太多模板参数时,代码书写难度急剧提高
满屏幕的< < < > > >
而C语言出发点是对计算机系统的操作抽象;对于类型集合,概念约束这些
泛化,或说是抽象描述能力,从语法上就没有涉及。
这也是为什么用void* 和字符串宏可以做到部分泛型,但丑陋
如这种
#define f(type) op_##type {type * _inst;}
....
【 在 hothail 的大作中提到: 】
: 隐约记得上学的时候,老师说过
: C通过 宏的方式, 可以做,甚至可以多OOP
: 但。。。。丑陋啊
: ...................
--
FROM 120.231.170.*