gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:03:50 28 4
gpt4 key购买 nike

我很好奇是否有任何方法可以在 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com