- 主题:c++反射提案正式进入标准
静态反射没啥用,在某个struct的编译环境中,直接使用成员不好吗?为啥要脱裤子放屁?
看22楼,做个公用程序,或者叫做独立于数据的程序,这个程序与他要处理的struct不在一个编译单元,因此它不认识提交的struct,这时才需要反射。
论访问数据库的性能,与JAVA比起来,可不是差一星半点,应该是有数量级的差距,按照27楼的方法。
一般人比较JAVA与C访问数据库的性能,用相同的语句比较,那是差不多,但是用上绑定变量和数组操作,性能就不是JAVA可比的了。
这两个操作,需要多次的枚举每个列名,类型,位置。
如果想做个通用的程序,用于简化编程,就需要动态的反射。
【 在 yuanmo 的大作中提到: 】
: 有静态反射就足够做很多事情了,以前得用大量时间做meta programming用来映射RPC和数据库之类,技巧一大堆,代码一大坨,就实现了一个别的语言内置的功能。
: C++非得纠结那一丢丢可以忽略不计的性能损失,宁可把开发效率降低50%。不可思议。
: 尤其是抛弃C++,用go、python、Typescript之后,回头再看C++,越看越觉得是屎,当年对C++有多熟悉,现在就有多讨厌这坨屎上雕花的奇技淫巧。
: ...................
--
修改:ylh1969 FROM 221.218.61.*
FROM 221.218.61.*
cpp的问题感觉太技术派 或者设计成最基本和底层的模式显示强大 却忽略应用上要求开发效率的诉求
在应用方面 效率提升的价值远远大于追求性能带来的价值大
【 在 yuanmo (栗子~~一毛一公斤) 的大作中提到: 】
: 有静态反射就足够做很多事情了,以前得用大量时间做meta programming用来映射RPC和数据库之类,技巧一大堆,代码一大坨,就实现了一个别的语言内置的功能。
:
: C++非得纠结那一丢丢可以忽略不计的性能损失,宁可把开发效率降低50%。不可思议。
:
--
FROM 124.127.24.*
同意
C++是很务实的一门语言
考虑了各种现实世界的问题,现实世界是复杂的
从一开始兼容C,已然把复杂性给包进来了,当然也只有兼容C才能做大
【 在 z16166 的大作中提到: 】
: 菜鸟喜欢推倒后完全重来,以为自己能平地起一座宏伟无比又完美的高楼,前无古人后无来者,实际可能也是一堆shi
: 编程语言的问题,C++他爹老早就说过了,只要跟C++是相同层面的语言,C++遇到的问题,其他语言也跑不了。
:
--
FROM 111.221.231.*
你能用go、python、Typescript干活,说明你确实不需要C++这种语言或者工具
那么你随便把C++喷成啥都行
如果在不能用GC的需求前提下,你还能用go、python、Typescript这些吗?
比如,你能用py写一个3A大作吗?
【 在 yuanmo 的大作中提到: 】
: 有静态反射就足够做很多事情了,以前得用大量时间做meta programming用来映射RPC和数据库之类,技巧一大堆,代码一大坨,就实现了一个别的语言内置的功能。
: C++非得纠结那一丢丢可以忽略不计的性能损失,宁可把开发效率降低50%。不可思议。
: 尤其是抛弃C++,用go、python、Typescript之后,回头再看C++,越看越觉得是屎,当年对C++有多熟悉,现在就有多讨厌这坨屎上雕花的奇技淫巧。
: ...................
--
FROM 114.245.255.*
先搞清楚有GC的语言、没GC的语言有啥区别再说
不再回复你的帖子
【 在 butcher 的大作中提到: 】
: 别装逼,你说说move是啥?
: 看来你就是绝世高手!
: move这种垃圾意义到底是啥?
: ...................
--
FROM 114.245.255.*
本篇转载至我的知乎回答。
看到大家在讨论 C++ 的反射,我提供一个使用 Qt 实现 C++ 反射的方案。注意,并不代表我认同在游戏服务器里面使用反射——我没有这方面的经验,所以不会给出任何建议——只是顺便说一下 C++ 是可以实现反射的。
首先看一下使用我弄的 RPC. 实现 C++ 服务器供客户端调用是怎么样的:
// server.cpp
class Hello: public QObject {
public slots:
QString sayHello(const QString &name) {
return QStringLiteral("Hello, %1").arg(name);
}
};
int main(int argc, char **argv) {
QSharedPointer<Rpc> rpc = RpcBuilder(MessagePack).create();
QSharedPointer<Hello> hello(new Hello());
rpc->registerInstance(hello, "demo");
rpc->startServer("tcp;//127.0.0.1:8002");
return 0;
}
客户端用 python 实现更简单一些
# client.py
from lafrpc import Rpc
rpc = Rpc.use("thread", "msgpack")
peer = rpc.connect("tcp;//127.0.0.1:8002")
demo = peer.as_proxy().demo
print(demo.sayHello("World"))
主要是看服务端那里的代码,可以看到调用的时候使用根据客户传过来的方法名,即可找到要被调用的函数。
这里使用的是就是 Qt 的反射能力。只要使用 slots来描述类的方法,Qt 就会生成一些额外的代码用于 C++ 反射,包含函数名、参数类型、返回值类型等等。服务器取到调用函数名之后,即可反推使用哪个函数来调用。Qt 内部用的一个 switch/case 来转发请求速度还挺快。
后注:删除了无关紧要的部分代码。tcp; 需要换成 tcp:
【 在 slimcan 的大作中提到: 】
: 我怎么感觉这些新特性让屎山代码概率更大了?一个好的设计里为啥需要反射?有人能举个必须要反射才行的例子吗
--
修改:hgoldfish FROM 110.84.122.*
FROM 110.84.122.*
22楼27楼57楼。
动态的反射,把屎山封装在工具库里,外边的使用是非常简洁的。
【 在 slimcan 的大作中提到: 】
: 我怎么感觉这些新特性让屎山代码概率更大了?一个好的设计里为啥需要反射?有人能举个必须要反射才行的例子吗
: --
--
FROM 221.218.61.*
这些是问问chatgpt就能知道的东西
所以,都是些啥人在喷呢。正所谓盲人摸象,摸到脚的,就以为脚是象的全部,“我即世界”,我用不到的,都是垃圾,我不懂的,更是垃圾
【 在 slimcan 的大作中提到: 】
: 我怎么感觉这些新特性让屎山代码概率更大了?一个好的设计里为啥需要反射?有人能举个必须要反射才行的例子吗
: --
--
修改:z16166 FROM 114.245.255.*
FROM 114.245.255.*
我觉得你个人比较极端啊
C++ 有很多很多的特性,不是说每个合格的程序员,每个厉害的程序员 都能覆盖所有的特性,不可能的
C++ 是你需要啥,有很大概率能从这里得到满足
当前还差得比较多,主要是标准库相关的,但就算这样,对于某些人来说,学习标准库,已然是很大的一个负担了啊
都是按需去使用,多知道一点 比 少知道一点,总是好的啊
如果觉得当前的某些特性丑,如果有更好的点子,好象渠道也是畅通的啊
C++ 标准应该是提过GC的,但最后又把GC从标准中去掉了,我看了下从提出GC到最终去除GC,好象就没有一个厂商支持过,我想表达的是:好的东西,最终都会被实现被推广被广泛应用,不好的东西,最终也没有人用,最后就会被扔在哪个角落里面直至死掉
不纠结这个啊
【 在 butcher 的大作中提到: 】
: 这个帖子已经没有意义了。
: 认为c加加严重跑偏的,这就是屎。
: 认为c加加在修炼葵花宝典囊括天下所有武功的,这就是珍馐。
: ...................
--
修改:overcomeunic FROM 111.221.231.*
FROM 111.221.231.*