- Notifications
You must be signed in to change notification settings - Fork0
QueenieCplusplus/Cplusplus_Template
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
模板,藉由引數傳遞常數 (引數即型別參數化),檢驗型別時間延後。在不遺失資訊的狀況下,以引數 Argument 方式傳遞型別,有效的 inline,進行編譯時期運算,將型別檢驗的時間延後,從不同語境中,構成資訊。
無型別無關的通用演算法方式來定義 stack 堆疊,藉由傳遞型別名稱當 Arg,將型態 typename 以參數傳入類別中,導入接收者,用於建立類別或是函數,因而不用再定義類別。
類別前關鍵字
template<typename TypeVar> class Stack{ };成員前關鍵字
template<typename TypeVar> void func(){}範例
// template <typename TypeVar>;// 從以往的值變成型態作為值// typename 為型別名稱// 上述的 Type 為通用型態的指示元,是變數容器的名稱// 加入關鍵字 template <typename TypeVar>class Stack{ private:enum {MAX=10}; // constant: ClassTypeVar items[MAX] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; // item holderint top; // index public:Stack();bool isFull() const;bool isEmpty() const;bool pop(int& item);};// 加入關鍵字template <typename TypeVar>bool Stack::pop(const TypeVar& item){ //...}; To replace a function call withan instance of the function's body. Actual argumentexpressions are substituted for formal parameters as in beta reduction. Inlining is usually done as a compile-time transformation.筆者此處分享之前寫安卓手機元件,其中一元件使用了模板型別的經驗!
https://github.com/katesandroidapp/TravelApp/commit/1c5f08a21d281e542c94581bc3bcebf387cc12dd
class TravelAgentAdapter(private val travelAgentData: List<TravelAgentModel>) : RecyclerView.Adapter<TravelAgentAdapter.BindingHolder>() { //... }class MainPageFragment : BaseFragment<MainPageViewModel, FragmentMainPageBinding>(HomeViewModel::class.java) { //... }公用繼承或是帶有 private 或是 protected 關鍵字的保護物件的繼承,並非是 reuse code 的唯一方法!而樣板 template 這樣的類別搭配通用 generic 的演算法,能成為特殊的樣板類別。
About
模板,藉由引數傳遞常數,檢驗型別時間延後。
Resources
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
No releases published
Packages0
No packages published
Uh oh!
There was an error while loading.Please reload this page.