微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C从函数返回更精确的两个模板参数?

我很好奇是否有办法在C中做到这一点.假设我有一个模板化的矢量类:
template <typename T>
class vector {          
public:
      vector(T a,T b,T c) : x(a),y(b),z(c) {}

      T x,y,z;
};

然后我有一个模板化的加法运算符:

template <typename A,typename B> 
vector<A> operator +(const vector<A> &a,const vector<B> &b) { 
   return vector<A>(a.x+b.x,a.y+b.y,a.z+b.z); 
}

我很好奇是否可以修改那个操作符,所以结果是两种类型A和B中哪一个更精确,除了手动专门化它.

例如:

vector<float>       + vector<double> would produce a vector<double>,vector<long double> + vector<float>  would produce a vector<long double>

我的猜测是C中没有自动支持,但我想我会问.

解决方法

库中没有任何内置支持,但您可以使用条件(?:)运算符来完成此操作.

在回答另一个答案时,Johannes Schaub发布了a promote<T,U> template,它很好地包含了逻辑.使用模板,您应该能够写:

template <typename A,typename B>  
vector< typename promote<A,B>::type >
operator+(const vector<A> &a,const vector<B> &b) 
{     
    return vector< typename promote<A,B>::type >(a.x+b.x,a.z+b.z);  
}

原文地址:https://www.jb51.cc/c/116635.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐