C++ 确定包含模板类型参数的表达式的结果类型?
使用c++11: 我想声明一个类型,它是减去两个模板参数类型值的结果 如何在模板中对其进行编码 例如:C++ 确定包含模板类型参数的表达式的结果类型?,c++,templates,c++11,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; }; 模板 C类{ 类型定义T成员; typedef TYPE_OF_RESULT_OF(T-T)member_diff_; }; 在上面的例子中,“T-T的结果
template<typename T>
class C {
typedef T member_t;
typedef TYPE_OF_RESULT_OF( T - T ) member_diff_t;
};
模板
C类{
类型定义T成员;
typedef TYPE_OF_RESULT_OF(T-T)member_diff_;
};
在上面的例子中,“T-T的结果类型”的替代品是什么
我希望计算任何算术类型的符号差。所以我想我可以用as_签名(T)。但如果有意义的话,询问编译器似乎更为正确。一个简单的解决方案是:
#include <type_traits>
using member_diff_t = typename std::decay<
decltype(std::declval<T>() - std::declval<T>())>::type;
#包括
使用member_diff_t=typename std::decay<
decltype(std::declval()-std::declval())>::type;
decay
确保您获得裸类型,删除引用,以防操作返回引用。感谢您的快速响应。我在第二个typename上遇到了一个错误,但这可能是一个铿锵的问题。我会升级,然后再试一次。@Austinghs第二个typename
是无关的。@Casey:谢谢你解决了这个问题。