在以下示例中是否有任何方法可以避免虚函数?
template<class T1, class T2>
struct A {
static T1 T1_ ();
static T2 T2_ ();
typedef decltype (T1_ () + T2_ ()) sum_type;
};
我想写
typedef decltype (T1+T2) sum_type;
但这是不可能的,因为T1
和T2
是类型,而不是变量。我的上述解决方案真的是最简单的吗?
答案 0 :(得分:5)
神圣标准正是为了这个目的而提供 std::declval
:
typedef decltype (declval<T1>()+declval<T2>()) sum_type;
包含<utility>
标题。
答案 1 :(得分:4)
你可以这样做:
typedef decltype(*(T1*)0 + *(T2*)0) sum_type;