gpt4 book ai didi

c++ - 如何使用decltype判断加法结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:09 25 4
gpt4 key购买 nike

使用 decltype 我可以执行以下操作:

template <typename T1, typename T2>
auto sum(T1 const & t1, T2 const & T2)
-> decltype(t1+t2)
{ /* ... */ }

但是,在我的例子中,我需要在没有 T1T2 类型实例的情况下找出加法的类型。具体来说:

template <typename ValueType>
class Matrix
{
/* ... */
public:
template <typename CompatibleType>
auto operator+(Matrix<CompatibleType> const & other)
-> Matrix<decltype(ValueType+CompatibleType)>
{ /* ... */ }
};

当然,decltype(ValueType+CompatibleType) 不是这样工作的。有什么办法可以实现这一目标吗?

最佳答案

使用 std::declval<T>(); (C++11):

#include <utility>

template <typename CompatibleType>
auto operator+(Matrix<CompatibleType> const & other)
-> Matrix<decltype(std::declval<ValueType>() + std::declval<CompatibleType>())>
{ /* ... */ }

std::declval返回一个右值引用,并且只在未计算的上下文中工作,decltype恰好是。

如果你的编译器不支持这个标准,使用这个指针技巧(它也只适用于未评估的上下文):

-> Matrix<decltype(*(ValueType*)(0) + *(CompatibleType*)(0))>
// or
-> Matrix<decltype(*static_cast<ValueType*>(0) +
*static_cast<CompatibleType*>(0))>

关于c++ - 如何使用decltype判断加法结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17013655/

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