[英]return optional from generic function in c++
什么是在c ++中返回通用可選項的另一種方法,而不使用optional<T>{} from BOOST library
的optional<T>{} from BOOST library
template<class T>
T search(T arg) {
// this function is just to show the idea of what I am trying to ac
if (found) return arg;
return ?<---
}
我的意思是,如果我知道最常見的類型,我可以稱之為這個功能
返回T(-1); 對於int
返回T(“未找到”); 對於字符串
return nullprt; 用於指針類型
但這就失敗了通用的目的。 必須有另一種方式嗎? 謝謝你的幫助
首先, boost::optional
或std::optional
完全針對該情況。 你有什么理由不想使用它們嗎? 因為大多數解決方案都會模仿std::optional
或者它們是一個糟糕的替代品。
template <class T>
bool search( T arg, T & out );
返回是否已將結果寫入out。 這可能是一個糟糕的替代品,因為它需要調用者構造一個T
類型的對象。 如果調用者本身是通用的,則T
必須是默認可構造的或傳遞給調用者本身。
template <class T>
const T & search( T arg );
可以替換為
template <class T>
const T * search( T arg );
請注意, std::optional
不支持與boost::optional
相同程度的引用,因此在使用std::optional
,在處理引用時可能會回到這一點。
我不推薦這個。 如果你想做得對,你必須考慮很多。 如果你可以忍受boost::optional
或std::optional
的約束(特別是關於線程安全性),我看不出你應該這樣做的原因。
再次閱讀您的問題,您考慮將虛擬值保留在地圖中。 我不推薦這個,因為很明顯,它不太通用,我看不到任何好處。 但是關於地圖,你會有一個提供虛擬值的類型特征:
template <class T>
struct DummyValue;
template <>
struct DummyValue<int>
{
static constexpr const int value = -1;
// Or:
// static int makeDummyValue();
};
// And so on ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.