我很好奇是否有任何方法可以在 C++ 中执行此操作。假设我有一个模板化 vector 类:
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.y+b.y, a.z+b.z);
}
关于C++ 从函数返回更精确的两个模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4866669/