gpt4 book ai didi

c++ - 如何在C++中将不同模板类型的对象相乘

转载 作者:行者123 更新时间:2023-11-30 01:49:12 24 4
gpt4 key购买 nike

我怎样才能使(具有不同模板类型的对象)A*B 和 B*A 给出相同的结果,其中结果的类型是根据通常的 C++ 类型提升规则确定的?

例如:

int main()
{
number<float> A(2.0f);
number<double> B(3.0);
A*B; // I want 6.0 (double)
B*A; // I want 6.0 (double)

return 0;
}

目前,我只能将相同模板类型的对象相乘。例如,像这样:

template<typename T>
class number
{
public:

number(T v) : _value(v) {}

T get_value() const { return _value; }

number& operator*=(const number& rhs)
{
_value *= rhs.get_value();
return *this;
}

private:

T _value;
};

template<typename T>
inline number<T> operator*(number<T> lhs, const number<T>& rhs)
{
lhs *= rhs;
return lhs;
}

编辑:或者,如答案所示,我可以乘以不同模板类型的对象,但总是返回与 lhs 相同的类型。有什么方法可以返回一个类型由标准类型提升规则确定的对象吗?

编辑 2:我想尽可能避免使用 C++11 特性

最佳答案

你必须模板化,例如rhs参数:

template<typename T>
class number
{
public:

number(T v) : _value(v) {}

T get_value() const { return _value; }
template<class E>
number& operator*=(const number<E>& rhs)
{
_value *= rhs.get_value();
return *this;
}

private:

T _value;
};

template<class T, class E, class RET = decltype(T()*E())>
number<RET> operator*(number<T>& lhs, const number<E>& rhs)
{
return lhs.get_value()*rhs.get_value();
}

关于c++ - 如何在C++中将不同模板类型的对象相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29444345/

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