确定涉及模板类型参数的表达式的结果类型
Determine type of result of expression involving template type parameters?
使用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
确保获得裸类型,并剥离引用,以防操作返回引用。
相关文章:
- 警告 C4552:">>":未使用表达式的结果
- 如何在一个表达式中生成并返回结果?
- 为什么'typeid(x) == typeid(y)'的计算结果为 true,其中 'x' 和 'y' 分别是 T 和 T& 类型的 id-表达式?
- 为什么 Boost:正则表达式没有按预期找到所有结果?
- 在 C++ 中使用带有正则表达式的 G++ 和 Visual Studio 14 2015 编译器时会产生不同的结果
- 为什么一个表达式中的 std::string 连接给出的结果与逐个字符不同的结果?
- 如何将 xt::sum 表达式结果转换为整数
- 为什么初始值设定项列表与表达式列表的结果不同
- 通过正则表达式拆分字符串会切断结果的第一个字母
- C++ 增强正则表达式与标准库正则表达式匹配结果
- 为什么表达式的结果取决于放置表达式的位置
- 使用不同的表达式计算同一整数时的结果不一致
- 对条件表达式结果的赋值(其中第二个和第三个操作数是相同类型和值类别的变量)是否仍然存在?
- 非常量表达式的左值到右值转换的结果是常数吗?
- C++正则表达式Visual Studio Community 2015给出<regex>意想不到的结果
- C++ "return"表达式的结果
- 表达式结果未使用,图像生成
- 警告:表达式结果未使用
- 正则表达式结果冲突
- 将两个正则表达式结果连接到一个输出字段中,一次只能使用一个