所以爲了get_as
template<typename T> T get_as(std::string key)
一樣的界面,編寫一個配置文件解析器可以返回解析值作爲一個特定的類型。由於我在內部將解析的配置文件存儲爲字符串映射,因此我仍然需要在轉換大部分數據之前將其返回。所以我使用type_traits頭來根據請求的類型來轉換數據。我做了以下假設:
- 所有非平凡類型都必須提供一個構造函數,它需要一個std :: string來構造它們自己。當且僅當它們拼寫錯誤,否則,我們拋出一個異常
實現是頭只,可以在我的github page找到
/// INTEGRAL TYPES
template<class T, typename std::enable_if<std::is_integral<T>::value && !std::is_same<bool, T>::value>::type* = nullptr>
T get_as(std::string key)
{
// Implementation
}
/// FLOATING TYPES
template<class T, typename std::enable_if<std::is_floating_point<T>::value>::type* = nullptr>
T get_as(std::string key)
{
// Implementation
}
/// BOOL
template<class T, typename std::enable_if<std::is_same<bool, T>::value>::type* = nullptr>
T get_as(std::string key)
{
// Implementation
}
/// COMPLEX TYPE
template<class T, typename std::enable_if<std::is_class<T>::value>::type* = nullptr>
T get_as(std::string key)
{
// Implementation
}
我有的問題是,這是否是一個好的設計來拆分我這樣執行取決於請求的類型。或者是否有更好的方法來實現類型相關的get_as接口?
僱傭失敗不是錯誤...原子? – Yakk
這可能更適合於[Code-Review](// codereview.stackexchange.com)Stack Exchange站點。 –
@TobySpeight謝謝 - 我不知道有這樣的事情。這就是爲什麼我試圖相應標記它。下次將使用其他網站:) – datosh