[英]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
。
在大多數情況下,結果類型非常明顯,但在少數情況下,結果可能...有趣,委婉地說。 例如,在對short
和int
使用 16 位的實現中(就像許多 MS-DOS 編譯器所做的那樣), unsigned short + int
完全有可能具有long
的通用類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.