AlohaV2
V2EX  ›  C++

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

  •  
  •   AlohaV2 · Jul 21, 2020 · 6764 views
    This topic created in 2297 days ago, the information mentioned may be changed or developed.
    头文件里有很多宏+模板的代码,因为如此 class 和 struct 的声明和实现全在里面,一个头文件有接近 2000 行长。今天想加点功能,然后又往里面塞东西了.... 感觉有点不爽,不知道各位大佬有没有解决方案?用 ipp 么?

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

    C++20 里面有个`export`的关键词能用,可惜鄙司项目离 20 还远....哎...
    23 replies  •  2020-07-23 12:43:01 +08:00
    allAboutDbmss
    allAboutDbmss
    Jul 21, 2020
    1
    2000 行很长吗...我很弱弱问一句
    SingeeKing
    SingeeKing
    Jul 21, 2020❤️1
    2
    2000 行真不长…… 很多开源项目都是这样
    LifStge
    LifStge
    Jul 21, 2020
    3
    确实这个不算长
    你这样想 你把超长头文件 分成很多不同的小文件 那么 你用的时候怎么办呢 详细记住哪个东西在哪个文件里面啊 自己分的 那还好 再比如 这些是别人 很多人 分的的 你确定你知道哪个在哪个里面么 写个代码不头疼死么 写次代码 翻次文档 没有文档 挨个翻源码啊..
    LifStge
    LifStge
    Jul 21, 2020
    4
    现在 代码的多少 都加进屎山的定义了么
    CismonX
    CismonX
    Jul 21, 2020 via iPhone❤️1
    5
    用预编译头,可以在头文件不变的时候加快源文件的编译速度

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

    另外 2000 行真的不长。公司里有个项目,头文件加起来有十几万行🤣
    xcstream
    xcstream
    Jul 22, 2020
    6
    include 套娃
    MrKou47
    MrKou47
    Jul 22, 2020 via iPhone
    7
    我感觉头文件挺好的。。总比分散在项目中好啊
    msg7086
    msg7086
    Jul 22, 2020 via Android
    8
    那你拆成一堆头文件屎饼啊…
    ericgui
    ericgui
    Jul 22, 2020
    9
    @CismonX 请问贵司啥项目?
    chinuno
    chinuno
    Jul 22, 2020 via Android
    10
    如果不是作为库使用的话可以提供一个思路。
    模板的实现写在 cpp 里面,然后 cpp 里面显式实例化。需要哪个类的实现就在 cpp 加一句重新编译 cpp 就可以
    AlohaV2
    AlohaV2
    OP
    Jul 22, 2020
    11
    @chinuno 类似`using SpecifiedSomeClass = TemplatedClass<Foo>;` 这样的吗
    meteor957
    meteor957
    Jul 22, 2020
    12
    2000 行一般吧 不算很长了
    newmlp
    newmlp
    Jul 22, 2020
    13
    2000 行不长,真不长
    GuangXiN
    GuangXiN
    Jul 22, 2020 via Android
    14
    .cpp 有两千行很长吗?我司一个.php 有 1980 行。
    yolee599
    yolee599
    Jul 22, 2020
    15
    head1.h
    head2.h
    head3.h
    byzf
    byzf
    Jul 22, 2020❤️3
    16
    所谓屎山叠加, 是把两千行复制一下, 然后在后面的两千行里改改, 变成四千行的文件, 这样换个人来维护代码, 就要在几十个长得几乎完全一样函数里找不同, 绝对维护不了.
    AlohaV2
    AlohaV2
    OP
    Jul 22, 2020 via iPhone
    17
    @byzf 大哥你别说我真的发现一个很像很像的文件!!
    hahaayaoyaoyao
    hahaayaoyaoyao
    Jul 22, 2020 via Android
    18
    @byzf 写个脚本查一下
    scukmh
    scukmh
    Jul 22, 2020
    19
    我司一个.py 1300 行.(
    chinuno
    chinuno
    Jul 23, 2020 via Android
    20
    @AlohaV2 https://docs.oracle.com/cd/E19205-01/821-0389/bkafk/index.html
    网上搜搜用法都有了。
    模板一般用法放头文件是使用的时候隐式实例化生成对应类的函数实现。
    显式实例化放 cpp 里面就提前指定了要实现函数内容,编译这个 cpp 的时候目标文件就包含了函数实现。这样就不需要引入头文件推迟到真正使用的时候才生成函数实现
    AlohaV2
    AlohaV2
    OP
    Jul 23, 2020
    21
    @chinuno 我用到的场景应该是需要隐式实例化的,或者说是我提供了一个模板类,然后不同的编译目标都可能根据自己的需求去实例化它。这种情况下放在 cpp 应该是无法编译的吧,所以就有了我提出的问题。
    Wirbelwind
    Wirbelwind
    Jul 23, 2020
    22
    我司 c++代码各种虚类,一个文件一个虚类,跳来跳去很麻烦。

    有些类型写得和 java 一样,还使用 DAO 命名的,然后 主设计开发者 去阿里当 p6 还是 p7 了
    sadfQED2
    sadfQED2
    Jul 23, 2020 via Android
    23
    @GuangXiN 1980 行确定没少打个 0 ?我这里 19800 行的 php 代码一大把
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2420 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 15:36 · PVG 23:36 · LAX 07:36 · JFK 10:36
    ♥ Do have faith in what you're doing.