[英]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.