今天又往💩山上加💩了,问一下超长头文件如何处理

2020-07-21 19:59:33 +08:00
 AlohaV2
头文件里有很多宏+模板的代码,因为如此 class 和 struct 的声明和实现全在里面,一个头文件有接近 2000 行长。今天想加点功能,然后又往里面塞东西了.... 感觉有点不爽,不知道各位大佬有没有解决方案?用 ipp 么?

编译环境是 C++14, clang / msvc

C++20 里面有个`export`的关键词能用,可惜鄙司项目离 20 还远....哎...
5660 次点击
所在节点    C++
23 条回复
allAboutDbmss
2020-07-21 20:39:02 +08:00
2000 行很长吗...我很弱弱问一句
SingeeKing
2020-07-21 21:46:03 +08:00
2000 行真不长…… 很多开源项目都是这样
LifStge
2020-07-21 22:09:08 +08:00
确实这个不算长
你这样想 你把超长头文件 分成很多不同的小文件 那么 你用的时候怎么办呢 详细记住哪个东西在哪个文件里面啊 自己分的 那还好 再比如 这些是别人 很多人 分的的 你确定你知道哪个在哪个里面么 写个代码不头疼死么 写次代码 翻次文档 没有文档 挨个翻源码啊..
LifStge
2020-07-21 22:11:28 +08:00
现在 代码的多少 都加进屎山的定义了么
CismonX
2020-07-21 22:27:56 +08:00
用预编译头,可以在头文件不变的时候加快源文件的编译速度

我之前用很多模版库,比如 boost,再比如 armadillo 等等,都是这么搞的

另外 2000 行真的不长。公司里有个项目,头文件加起来有十几万行🤣
xcstream
2020-07-22 00:19:27 +08:00
include 套娃
MrKou47
2020-07-22 00:41:04 +08:00
我感觉头文件挺好的。。总比分散在项目中好啊
msg7086
2020-07-22 02:01:14 +08:00
那你拆成一堆头文件屎饼啊…
ericgui
2020-07-22 04:53:18 +08:00
@CismonX 请问贵司啥项目?
chinuno
2020-07-22 08:42:18 +08:00
如果不是作为库使用的话可以提供一个思路。
模板的实现写在 cpp 里面,然后 cpp 里面显式实例化。需要哪个类的实现就在 cpp 加一句重新编译 cpp 就可以
AlohaV2
2020-07-22 09:53:50 +08:00
@chinuno 类似`using SpecifiedSomeClass = TemplatedClass<Foo>;` 这样的吗
meteor957
2020-07-22 09:56:40 +08:00
2000 行一般吧 不算很长了
newmlp
2020-07-22 10:10:48 +08:00
2000 行不长,真不长
GuangXiN
2020-07-22 12:44:17 +08:00
.cpp 有两千行很长吗?我司一个.php 有 1980 行。
yolee599
2020-07-22 12:48:08 +08:00
head1.h
head2.h
head3.h
byzf
2020-07-22 17:08:13 +08:00
所谓屎山叠加, 是把两千行复制一下, 然后在后面的两千行里改改, 变成四千行的文件, 这样换个人来维护代码, 就要在几十个长得几乎完全一样函数里找不同, 绝对维护不了.
AlohaV2
2020-07-22 17:09:04 +08:00
@byzf 大哥你别说我真的发现一个很像很像的文件!!
hahaayaoyaoyao
2020-07-22 20:17:55 +08:00
@byzf 写个脚本查一下
scukmh
2020-07-22 20:41:11 +08:00
我司一个.py 1300 行.(
chinuno
2020-07-23 08:49:00 +08:00
@AlohaV2 https://docs.oracle.com/cd/E19205-01/821-0389/bkafk/index.html
网上搜搜用法都有了。
模板一般用法放头文件是使用的时候隐式实例化生成对应类的函数实现。
显式实例化放 cpp 里面就提前指定了要实现函数内容,编译这个 cpp 的时候目标文件就包含了函数实现。这样就不需要引入头文件推迟到真正使用的时候才生成函数实现

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/692018

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX