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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...