簡體   English   中英

如何在通用 class 中從通用 function 聲明我的返回類型

[英]How can I declare my return type from generic function in generic class

我在 c++ 中有通用的 class

template<typename A>
struct  series { 

A member;
}

template<typename A,typename B,typename C>
series <C> & operator + (A first, const B& second) {
return first+second;
}

我需要返回類型 A 和類型 B 的隱式轉換類型。Fox 示例:double a + int b → 隱式轉換是 double 我該怎么做,因為無法像這樣確定 C 我正在嘗試使用 decltype 和 typedef但它沒有用 提前致謝

您可以將 C++11 尾隨返回類型與decltype一起使用:

template<typename A,typename B>
auto operator+(A first, const B& second) -> decltype(first+second) {
  return first+second;
}

標准庫為這種情況提供了許多模板。 目前,讓我們處理一個非常簡單的案例:

template <class T, class U>
returnType operator+(T t, U u) {
    return t + u;
}

那么我們應該為returnType使用什么呢? 在這種情況下,我們可以使用std::common_type ,它告訴我們當在一個表達式中一起使用時,它的兩個操作數類型將轉換為的公共類型。

template <class T, class U>
typename std::common_type<T, U>::type add(T t, U u) {
    return t + u;
}

因此,如果我們將一個int和一個double傳遞給它,則返回類型將為double

在大多數情況下,結果類型非常明顯,但在少數情況下,結果可能...有趣,委婉地說。 例如,在對shortint使用 16 位的實現中(就像許多 MS-DOS 編譯器所做的那樣), unsigned short + int完全有可能具有long的通用類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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