其實小弟想發問的問題有兩個,
首先是如標題說明的,在一個專案裡的 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) 介面與實作分開這件事該怎麼分割比較適合?
先謝謝看完問題的各位~