类型表达式的decltype

时间:2012-11-17 06:20:38

标签: c++ templates decltype

在以下示例中是否有任何方法可以避免虚函数?

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;

但这是不可能的,因为T1T2是类型,而不是变量。我的上述解决方案真的是最简单的吗?

2 个答案:

答案 0 :(得分:5)

神圣标准正是为了这个目的而提供 std::declval

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

包含<utility>标题。

答案 1 :(得分:4)

你可以这样做:

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