libfon9 基礎建設程式庫 - 雜項
May 21, 2019 · View on GitHub
基本說明
較難歸類的小工具,放在此處說明
一般工具
返回值可包含錯誤碼: Outcome<>
fon9/Outcome.hppOutcome<Result, Error=ErrC>
錯誤碼 ErrC
fon9/ErrC.hppusing 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
fon9/HostId.hppextern fon9_API HostId LocalHostId_;
快速物件分配機制 ObjSupplier
設定檔載入工具
載入模組
定義執行入口
fon9/seed/Plugins.hppfon9::seed::PluginsDescfon9::seed::PluginsPark- 範例: