- 主题:我们很多同事都是完全不用unique_ptr,一律shared_ptr
C++现在还没反射(提案阶段,没正式标准),所以反射struct的字段那个搞法,和pure C是差不多的,但可以用模板。
sql语句是变参的,用C++的变参模板来拼接sql字符串是最合适的(不考虑拼接字符串可能带来的sql注入漏洞等问题的话)。
【 在 ylh1969 的大作中提到: 】
: ok,我慢慢看。步骤差了许多,原理看看行不行。
--
FROM 111.199.144.*
sql注入不用考虑,拼接是内部过程,不对外。
外部只提供数据,才不管语句。
【 在 z16166 的大作中提到: 】
: C++现在还没反射(提案阶段,没正式标准),所以反射struct的字段那个搞法,和pure C是差不多的,但可以用模板。
: sql语句是变参的,用C++的变参模板来拼接sql字符串是最合适的(不考虑拼接字符串可能带来的sql注入漏洞等问题的话)。
:
--
FROM 114.244.128.*
绑定那段,AI完全理解错啦。不是那个操作。
可以考虑模板与struct完全分离。。
【 在 z16166 的大作中提到: 】
: pure C的我没兴趣搞了。
: AI给的modern c++方式的:
: #include <iostream>
: ...................
--
修改:ylh1969 FROM 114.244.128.*
FROM 114.244.128.*
就是操作任意struct的任意member field。
你想要什么样的绑定操作?
【 在 ylh1969 的大作中提到: 】
: 绑定那段,AI完全理解错啦。不是那个操作。
: 可以考虑模板与struct完全分离。。
--
FROM 111.199.144.*
这是由数据库接口确定的,我只能服从。
绑定的数据,只能使用指针。
我看错了,它没有操作绑定,只是cout了,看看而已。
原则上,能判断类型,能找到地址就能绑定。
这是个编译期泛型,要想改成运行期泛型,可以用该办法生成独立模板,通用的功能可以做成运行时库,接受独立的结构和独立的模板即可。
【 在 z16166 的大作中提到: 】
: 就是操作任意struct的任意member field。
: 你想要什么样的绑定操作?
:
--
修改:ylh1969 FROM 114.244.128.*
FROM 114.244.128.*
f.ptr就是绑定的字段成员的地址啊
f.name是字段的名字
cout那些打印是可以无视的,那只是演示怎么用那些数据。
【 在 ylh1969 的大作中提到: 】
: 这是由数据库接口确定的,我只能服从。
: 绑定的数据,只能使用指针。
: 我看错了,它没有操作绑定,只是cout了,看看而已。
: ...................
--
FROM 111.199.144.*
可以把f做成独立模板。
【 在 z16166 的大作中提到: 】
: f.ptr就是绑定的字段成员的地址啊
: f.name是字段的名字
: cout那些打印是可以无视的,那只是演示怎么用那些数据。
: ...................
--
FROM 114.244.128.*
你们也太折腾了。
要我就写个预处理器读 sql 表结构,让 cmake 在编译之前跑一下。
最终上层的代码一定非常漂亮。
【 在 ylh1969 的大作中提到: 】
: 可以把f做成独立模板。
--
FROM 125.78.41.*
发一个,欣赏欣赏。
我也是,读一下表结构,生成模板。
【 在 hgoldfish 的大作中提到: 】
: 你们也太折腾了。
: 要我就写个预处理器读 sql 表结构,让 cmake 在编译之前跑一下。
: 最终上层的代码一定非常漂亮。
: ...................
--
FROM 221.221.52.*
f.ptr,理论上可以,实际上,难。
因为实际上要面对一大堆数据,结构数组,不需要每个记录都有模板,一个模板即可。
所以,模板里,ptr要变成offset。与数据分离,一个模板处理一大堆数据,各个来源各个去处的,不同函数里的。
最早是在informix数据库里的dbview,名字类型长度位置。位置就是ptr,好处是即可以用离散变量又可以用结构。模板数据分离的。
但是太死板。我给改成offset了,立刻天地宽了,可以配合各个数据。处理数组也方便。
用时就是一个指针运算,p+offset。pascal干不来。
【 在 z16166 的大作中提到: 】
: f.ptr就是绑定的字段成员的地址啊
: f.name是字段的名字
: cout那些打印是可以无视的,那只是演示怎么用那些数据。
: ...................
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*