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

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

最佳答案

一个简单的解决方案是这样的:

#include <type_traits>

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

衰减 确保您获得裸类型,剥离引用,以防操作返回引用。

关于c++ - 确定涉及模板类型参数的表达式的结果类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20167503/

相关文章:

c++ - 将字符转换为 UTF-8 背后的逻辑

c++ - 如何使用 CRTP 创建少量对象?

c++ - Clang 问题 : implicit type conversion at construction time

c++ - 如何在编译时查询 constexpr std::tuple?

c++ - 无法从压缩纹理数据创建图像 (S3TC)

c++ - 顶级或低级常量或两者都不是?

c++ - 我对 enable_if 和 has_member 做错了什么?

c++ - 完美转发 C++ 重载和模板化仿函数及其参数

c++ - 有没有办法在编译时检查 std::initializer_list 参数的数量?

c++ - 为什么这是 C++ 中的有效函数声明?