其实小弟想发问的问题有两个,
首先是如标题说明的,在一个专案里的 include & lib 资料夹分别代表什么意思,
我知道跟 header file、static library、shared library 有关,
但我想问的不是在 source code include header file 或是 compile time 的 linker
相关问题,
而是说 "什么概念的 source code" 该放在 include & lib 资料夹。
第二个问题是 class 的 declaration & definition 到底怎么写才是对的,
因为不管是学校或是网络上的入门教学,都会建议接口跟实作要分开,
几乎所有的例子都是 declaration 放在 .h 档、definition 放在 .cpp 档,
所以原本小弟一直以为 class 的 declaration (.h) 就是放在 include、class 的
definition (.cpp) 就是放在 lib,
但看了一些 open source 的专案才发现不是我想的这样。
以最近在看的 LLVM 的 SmallVector 当例子,
(简单说明一下,SmallVactor 是对 elements 较少的情况而去优化的 vector)
在 LLVM 的 source code 中可以分别找到
SmallVector.h
https://code.woboq.org/llvm/llvm/include/llvm/ADT/SmallVector.h.html
以及
SmallVector.cpp
https://code.woboq.org/llvm/llvm/lib/Support/SmallVector.cpp.html
但翻一下 code 可以发现几乎 95% 的功能实作都是在 .h 档里面,
并且也没有所谓的接口与实作分开。
虽然写了一段时间的程式,但对这一块真的没什么研究,
google 也是找到一堆 header file 与 library 之间的差异,
但我想问的不是 link 之类的问题啊~~
最后再简述一下问题:
1. 专案中的 include & lib 资料夹中的 source code 应该放什么概念的 code
才是对的?
2. (X) 接口与实作分开这件事是有必要的吗?
(O) 接口与实作分开这件事该怎么分割比较适合?
先谢谢看完问题的各位~