作者maxi326 (寻找独立游戏制作团员!)
看板C_and_CPP
标题[问题] C++ header file 疑问
时间Thu Jun 23 15:48:21 2016
最近因为要用到一个开源专案, 需要看里面的C++ code, 本身对C++不熟
但越看觉得越疑惑, 本身是有JAVA经验, 同样是OOP, 看来想法很不一样
C++跟C一样, 需要header file, 我自己的直觉是这样
header负责定义框架, 让其他人只要看到header, 就知道这个class有些甚麽, 包含
include了那些其他文件, 类别方法的signature, 等等
cpp档案负责实作这些逻辑, 理想情况下, 一个cpp档只定义一个类别, 并只include自己
的header file
例如
cup.h
#include <string>
namespace EX
{
class Cup
{
public:
drink();
fill();
private:
bool canDrink;
}
}
cup.cpp
#include "cup.h"
Cup::drink()
{
canDrink = false;
}
Cup::fill()
{
canDrink = true;
}
但实际上, 我看到的source code, header里面有include一堆文件, cpp档又include另一
堆, 然後header里面定义不止一个class, 而且还有实作逻辑在里面. 阅读起来真的是一
种折磨.
我想问的是, C++写成这样是一种怎样的pattern? 因为开源专案都有很多人在写, 如果
分散成这样, 应该很难互相合作才对, 所以这种pattern是代表某种大家认同的设计模式?
C++的header该负责甚麽内容, 是不是有大家比较公认的pattern?
--
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.228.246.99
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1466668104.A.37A.html
1F:推 Bencrie: header 放的是要汇出给其他 source 用的宣告 06/23 15:57
2F:→ Bencrie: 只放必要的东西。dependency 越少越好 06/23 15:57
3F:推 bibo9901: C++没有Java的package机制, include是复制贴上而已 06/23 16:03
4F:→ bibo9901: 然後实作写在header里通常是因为template 06/23 16:04
5F:推 Yshuan: 开发跟release的也许会不同 06/23 16:21
6F:→ Caesar08: 给实际例子,那些专案把实作逻辑写在.h 06/23 16:46
7F:推 chchwy: header是服务编译器的机制 不是服务人的 所以才会那麽怪 06/23 19:39
8F:推 james732: header要弄得很好其实很不容易,乱写倒是很简单XD 06/23 23:02
9F:推 steve1012: 话说不是在讨论要不要加package 跟module 进c++20里了 06/24 00:59
10F:推 s25g5d4: 好像有牵扯到 template 的东西都只能把实作写在 header 06/24 03:22
11F:→ s25g5d4: 里 因为 compiler 要靠 header 生 code 06/24 03:22
12F:→ s25g5d4: 例如 Boost 整个专案几乎只有 header 06/24 03:23
13F:→ s25g5d4: 有时候不是不想把宣告跟定义分开 而是因为现实迫於无奈 06/24 03:24
14F:→ s25g5d4: 然後 include 的问题...我觉得 header 应该维持最小 incl 06/24 03:25
15F:→ s25g5d4: ude 原则 实作才需 include 的东西就放在实作里 06/24 03:25
16F:→ uranusjr: 最小 include 原则也是有得讨论, 例如 Google C++ 风格 06/24 09:41
17F:推 z1976: 只有实作时才需要用到的就在cpp include 06/24 23:22
18F:→ z1976: class会用到的才会在h档include 06/24 23:22
19F:→ rodion: 等等 不是开源专案就代表都是好的coding style阿~ 06/25 02:09