STL Commom Type

template <typename T1,template T2>
??? min(const T1& x, const T2& y);

如何知道返回类型

template <typename T1,typename T2>
typename std::common_type<T1,T2>::type min (const T1& x, const T2& y);

此时可推断出结果,int + long ->long const char* + std::string -> std::string

实现方式为

template <typename T1,typename T2>
struct common_type<T1,T2> {
	typedef decltype(true ? declval<T1>() : declval<T2>()) type;
	//true也可以为false,主要为了组成?:操作符
}

declval<>依据传入的类型提供一个值,但不去核算它(也就是为该值产生一个rvalue reference)
如果?:操作符可以找出一个共通类型,就会得到该类型,如果找不到,需要重载common_type<>

你可能感兴趣的:(C++)