问题描述
|
有时我需要满足以下条件:
template<bool B,typename T1,typename T2>
struct choose{
typedef T1 type;
};
template<typename T1,typename T2>
struct choose<false,T1,T2>{
typedef T2 type;
};
我用它有条件地选择一种或另一种。现在,标准库中已经有可以完全做到这一点的东西吗? Boost.MPL具有类似的功能,但是并不完全相同(采用类型,而不是布尔值),我不想在这小东西中包含Boost。 :)
解决方法
是的:在C ++ 0x中称为
std::conditional
(在Boost中称为boost::conditional
)。
您引用的boost::mpl::if
有一个对应的boost::mpl::if_c
,而该takes4 a是bool
而不是类型。这是Boost类型特征库中的常见模式。