3

有什么方法可以避免以下示例中的虚拟函数?

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;

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

4

2 回答 2

5

圣标准std::declval正是为此目的而规定的:

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

包括<utility>标题。

于 2012-11-17T06:38:43.763 回答
4

你可以这样做:

typedef decltype(*(T1*)0 + *(T2*)0) sum_type; 
于 2012-11-17T06:38:35.043 回答