使用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)。但是,如果有意义的话,问问编译器似乎更正确。
答案 0 :(得分:7)
一个简单的解决方案是:
#include <type_traits>
using member_diff_t = typename std::decay<
decltype(std::declval<T>() - std::declval<T>())>::type;
decay
确保您获取裸体类型,并删除引用,以防操作返回引用。