繁体   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