簡體   English   中英

從c ++中的泛型函數返回可選項

[英]return optional from generic function in c++

什么是在c ++中返回通用可選項的另一種方法,而不使用optional<T>{} from BOOST libraryoptional<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::optionalstd::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::optionalstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM