“min”类型是指比较的类型less比所有根据编译时函数,例如sizeof
我有一个实施草案 http://ideone.com/eXLkrM,先介绍一下我面临的两个问题:
#include <iostream>
#include <typeinfo>
#include <type_traits>
using namespace std;
// Unspecialized version
template<typename...Ts>
struct Tmin
{
using type = void;
};
template<typename T>
struct Tmin<T>
{
using type = T;
};
template<typename T1, typename T2, typename...Ts>
struct Tmin<T1, T2, Ts...>
{
using type = typename std::conditional<sizeof(T1) < sizeof(T2),
typename Tmin<T1, Ts...>::type, typename Tmin<T2, Ts...>::type
>::type;
};
int main()
{
cout << typeid(Tmin<float, int, double>::type).name() << endl;
return 0;
}
这在 VS2013 中不起作用(发出fatal error C1075
)。我是否使用任何非标准设施或者是否有更符合的方式来编写上述内容?
假设我想使用除sizeof
来比较类型。是否有一种简洁的方法/良好的设计能够将元函数作为比较器传递,并且仍然保持默认行为(如果没有另外指定),将使用sizeof
?
看来 MSVC 解析失败了std::conditional
表达。似乎觉得小于之间sizeof(T1) < sizeof(T2)
是开幕<
另一个模板参数。添加一组额外的括号就可以了。
template<typename T1, typename T2, typename...Ts>
struct Tmin<T1, T2, Ts...>
{
using type = typename std::conditional<(sizeof(T1) < sizeof(T2)),
// ^ ^
typename Tmin<T1, Ts...>::type, typename Tmin<T2, Ts...>::type
>::type;
};
对我来说看起来像是一个 MSVC bug。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)