較難歸類的小工具,放在此處說明
fon9/Outcome.hpp
Outcome<Result, Error=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);
fon9/StaticPtr.hpp
- 取代
static std::unique_ptr<T> ptr;
或static thread_local std::unique_ptr<T> ptr;
- 因為在 ptr 死亡後,可能還會用到 ptr。
- 增加
ptr.IsDisposed()
判斷 ptr 本身(不是所指物件),是否已經死亡。
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(...)
fon9/HostId.hpp
extern fon9_API HostId LocalHostId_;
fon9/seed/Plugins.hpp
fon9::seed::PluginsDesc
fon9::seed::PluginsPark
- 範例: