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

前端之家收集整理的这篇文章主要介绍了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);  
}

猜你在找的C&C++相关文章