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

时间:2013-11-23 20:30:31

标签: c++ templates c++11

使用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)。但是,如果有意义的话,问问编译器似乎更正确。

1 个答案:

答案 0 :(得分:7)

一个简单的解决方案是:

#include <type_traits>

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

decay确保您获取裸体类型,并删除引用,以防操作返回引用。