确定涉及模板类型参数的表达式的结果类型

Determine type of result of expression involving template type parameters?

本文关键字:表达式 结果 类型 类型参数      更新时间:2023-10-16

使用c++11:

我想声明一个类型,它是减去两个模板参数类型值的结果。

如何在模板中对此进行编码?

示例:

template<typename T>
class C {
    typedef T member_t;
    typedef TYPE_OF_RESULT_OF( T - T ) member_diff_t;
};

上面的"TYPE_OF_RESULT_OF(T-T)"将用什么替代?

我期望计算任何算术类型的有符号差。所以我想我可以使用as_signed(T)。但是,如果有意义的话,询问编译器似乎更正确。

一个简单的解决方案是:

#include <type_traits>
using member_diff_t = typename std::decay<
    decltype(std::declval<T>() - std::declval<T>())>::type;

decay确保获得裸类型,并剥离引用,以防操作返回引用。