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;