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++ 类型表达式上的decltype_C++_Templates_Decltype - Fatal编程技术网

C++ 类型表达式上的decltype

C++ 类型表达式上的decltype,c++,templates,decltype,C++,Templates,Decltype,在下面的示例中,有没有办法避免使用伪函数 template<class T1, class T2> struct A { static T1 T1_ (); static T2 T2_ (); typedef decltype (T1_ () + T2_ ()) sum_type; }; 但这是不可能的,因为T1和T2是类型,而不是变量。我的上述解决方案真的是最简单的吗?您可以这样做: typedef decltype(*(T1*)0 + *(T2*)0

在下面的示例中,有没有办法避免使用伪函数

template<class T1, class T2>
struct A {

    static T1 T1_ ();
    static T2 T2_ ();

    typedef decltype (T1_ () + T2_ ()) sum_type;
};
但这是不可能的,因为
T1
T2
是类型,而不是变量。我的上述解决方案真的是最简单的吗?

您可以这样做:

typedef decltype(*(T1*)0 + *(T2*)0) sum_type; 

《神圣标准》提供的std::declval正是出于此目的:

typedef decltype (declval<T1>()+declval<T2>()) sum_type;
typedef decltype(declval()+declval())和类型;

包括
标题。

typedef decltype(*(T1*)0+*(T2*)0)sum\u类型避免使用函数。谢谢!正是我需要的。从没听说过。Visual C++ 2010似乎没有它,但现在它自己声明的代码>模板T DECVALL();code>@JohnB:正确的是
模板typename std::add\u rvalue\u reference::type declval()
.Hm,不应该是函数的结果还是右值?我完全相信你所说的,但我不明白为什么简单的
T
是不够的。
typedef decltype (declval<T1>()+declval<T2>()) sum_type;