Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 确定包含模板类型参数的表达式的结果类型?_C++_Templates_C++11 - Fatal编程技术网

C++ 确定包含模板类型参数的表达式的结果类型?

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的结果

使用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的结果类型”的替代品是什么


我希望计算任何算术类型的符号差。所以我想我可以用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:谢谢你解决了这个问题。