Skip to content

Latest commit

 

History

History
70 lines (59 loc) · 2.64 KB

Misc.md

File metadata and controls

70 lines (59 loc) · 2.64 KB

libfon9 基礎建設程式庫 - 雜項

基本說明

較難歸類的小工具,放在此處說明


一般工具

返回值可包含錯誤碼: Outcome<>

錯誤碼 ErrC

  • fon9/ErrC.hpp
  • using ErrC = std::error_condition;
  • Windows: ErrC GetSysErrC(DWORD eno = ::GetLastError());
  • UNIX: ErrC GetSysErrC(int eno = errno);
  • void RevPrint(RevBuffer& rbuf, ErrC errc);

StaticPtr

  • fon9/StaticPtr.hpp
  • 取代 static std::unique_ptr<T> ptr;static thread_local std::unique_ptr<T> ptr;
  • 因為在 ptr 死亡後,可能還會用到 ptr。
  • 增加 ptr.IsDisposed() 判斷 ptr 本身(不是所指物件),是否已經死亡。

intrusive_ptr<>、intrusive_ref_counter<>

  • fon9/intrusive_ptr.hpp
    • 參考 boost 的文件
    • fon9 的額外調整: 在 intrusive_ptr_release() 時, 如果需要刪除, 則會呼叫 intrusive_ptr_deleter();
      • 如此一來就可以自訂某型別在 intrusive_ptr<> 的刪除行為,預設直接呼叫 delete
      • 例:
        class MyClass : public fon9::intrusive_ref_counter<MyClass> {
           virtual void OnBeforeDestroy() const {
           }
           // 自訂 intrusive_ptr<> 刪除 MyClass 的方法.
           inline friend void intrusive_ptr_deleter(const MyClass* p) {
              p->OnBeforeDestroy();
              delete p;
           }
        };
  • fon9/intrusive_ref_counter.hpp
    • 參考 boost 的文件
    • 提供類似 std::make_shared() 但使用 intrusive_ref_counter 機制的: ObjHolder<ObjT>, MakeObjHolder(...)

HostId

快速物件分配機制 ObjSupplier


設定檔載入工具

載入模組

定義執行入口

載入管理員